线程创建方式的三种方式
三种线程创建方式
-
继承 Thread 类重写 run 方法 实现Runnable接口的run方法 使用Callable和Future创建线程
继承 Thread 类重写 run 方法
实现 Runnable 接口 run 方法
使用Callable和Future创建线程
// 创建任务类 public stat class CallerTask implemets Callable<返回类型> { @Override public 返回类型 call() throws Exception{ return 返回类型值; } } // 具体使用: // 创建异步任务 FutureTask<返回类型> futureTask =new FutureTask<>(new CallerTask()) ; // 启动线程 new Thread(futureTask).start(); // 等待任务执行完毕,并返回结果 返回类型 result = futureTask.get();
CallerTask 类实现了 Callable 接口的 call ()方法 。
- 在 main 函数内首先创建了FutrueTask 对象(构造函数为CallerTask 实例)
- 使用创建的FutrueTask 对象作为任务创建了一个线程并启动它
- 通过futureTask.get()等待任务执行完毕并返回结果
总结:
使用继承方式的好处是方便传参,可以在子类里添加成员变量,通过set方法设置参数或者通过构造函数进行传递。不好的是不可以继承其他类,不能拿到任务的返回结果。
使用Runnable方式,只能使用主线程里被声明为final的变量。可以继承其他类,不能拿到任务的返回结果。
使用Callable和Future方式,可以拿到任务的返回结果。
下一篇:
C语言经典例17-统计字符个数