Java中线程的生命周期以及线程的使用
【摘要】
直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。 class T extends Thread{
@Override
...
-
直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。
class T extends Thread{ @Override public void run() { System.out.println("ttttt"); } public static void main(String[] args) { T t = new T(); t.start(); } }
-
通过实现 Runnable 接口,为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:
class T implements Runnable{ @Override public void run() { System.out.println("ttttt"); } public static void main(String[] args) { T t = new T(); new Thread(t).start(); } }
-
通过 Callable 和 Future 创建线程。
-
创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
-
创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
-
使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
-
调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
public class CallableThreadTest implements Callable<Integer> { public static void main(String[] args) { CallableThreadTest ctt = new CallableThreadTest(); FutureTask<Integer> ft = new FutureTask<>(ctt); for(int i = 0;i < 100;i++) { System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i); if(i==20) { new Thread(ft,"有返回值的线程").start(); } } try { System.out.println("子线程的返回值:"+ft.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } @Override public Integer call() throws Exception { int i = 0; for(;i<100;i++) { System.out.println(Thread.currentThread().getName()+" "+i); } return i; } }
-
文章来源: englishcode.blog.csdn.net,作者:知识浅谈,版权归原作者所有,如需转载,请联系作者。
原文链接:englishcode.blog.csdn.net/article/details/120684442
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)