java多线程带返回值_JAVA多线程实现的三种⽅式和带返回值
实现
1、JAVA多线程实现的四种⽅式
继承Thread类
实现Runnable接⼝
实现Callable接⼝通过FutureTask包装器来创建Thread线程
使⽤ExecutorService、Callable、Future实现有返回结果的多线程
2、继承Thread类创建线程
Thread类本质上是实现了Runnable接⼝的⼀个实例
代表⼀个线程的实例
启动线程的唯⼀⽅法就是通过Thread类的start()实例⽅法
start()⽅法是⼀个native⽅法,它将启动⼀个新线程,并执⾏run()⽅法
3、实现Runnable接⼝创建线程
实现Runnable接⼝
继承 Thread 有弊端,java是单继承的
启动MyThread,需要⾸先实例化⼀个Thread,并传⼊⾃⼰的MyThread实例
4、实现Callable接⼝通过FutureTask包装器来创建Thread线程
Callable接⼝(也只有⼀个⽅法)定义如下:
⽤法如下:
5、使⽤ExecutorService、Callable、Future实现有返回结果的线程
可返回值的任务必须实现Callable接⼝
⽆返回值的任务必须实现Runnable接⼝
执⾏Callable任务后,可以获取⼀个Future的对象,在该对象上调⽤get就可以获取到Callable任务返回的Object 注意:get⽅法是阻塞的,即:线程⽆返回结果,get⽅法会⼀直等待
/**
* 有返回值的线程
*/
@SuppressWarnings("unchecked")
public class Test {
public static void main(String[] args) throws ExecutionException,
InterruptedException {
System.out.println("----程序开始运⾏----");
Date date1 = new Date();
int taskSize = 5;
// 创建⼀个线程池
ExecutorService pool = wFixedThreadPool(taskSize);
// 创建多个有返回值的任务
List list = new ArrayList();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 执⾏任务并获取Future对象
Future f = pool.submit(c);
// System.out.println(">>>" + f.get().toString());
list.add(f);
}
// 关闭线程池
java线程池创建的四种pool.shutdown();
// 获取所有并发任务的运⾏结果
for (Future f : list) {
// 从Future对象上获取任务的返回值,并输出到控制台
System.out.println(">>>" + f.get().toString());
}
Date date2 = new Date();
System.out.println("----程序结束运⾏----,程序运⾏时间【"
+ (Time() - Time()) + "毫秒】");
}
}
class MyCallable implements Callable {
private String taskNum;
MyCallable(String taskNum) {
this.taskNum = taskNum;
}
public Object call() throws Exception {
System.out.println(">>>" + taskNum + "任务启动");
Date dateTmp1 = new Date();
Thread.sleep(1000);
Date dateTmp2 = new Date();
long time = Time() - Time();
System.out.println(">>>" + taskNum + "任务终⽌");
return taskNum + "任务返回运⾏结果,当前任务时间【" + time + "毫秒】"; }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。