JAVA关于callable接口的多线程问题

发布网友

我来回答

3个回答

热心网友

展开1全部我想原因是只有一个FutureTask实例造成的,一个FutureTask实例只能启动一个线程
再追加一个
FutureTask<Integer> f1 = new FutureTask<Integer>(m);
new Thread(f1, "有返回值的线程2").start();追问  那这样就不是我想要的结果了,我是希望对象m中的循环能够分给几个线程一起完成,就是希望几个线程一起完成循环,比如:
   有返回值的线程1 23

   有返回值的线程2 24

。。。。

 这样把整个循环走完。
 使用runnable和直接继承Thread类的话就可以,而这个好像就不行。为什么?

追答这跟调用机制有关,因为每一个FutureTask只能等待一个线程,在线程中调用Callable#call方法,也就相当于调用了多次call方法,除非call方法访问互斥资源,比如call方法里的i假如是互斥的,就能达到你要的结果

热心网友

你的new Thread()中用了同一个FutureTask,当线程 
使用一个新的FutureTask<Integer> f2 = new FutureTask<Integer>(m);
使用一个新的就会出来了

追问  那这样就不是我想要的结果了,我是希望对象m中的循环能够分给几个线程一起完成,就是希望几个线程一起完成循环,比如:
   有返回值的线程1 23

   有返回值的线程2 24

。。。。

 这样把整个循环走完。
 使用runnable和直接继承Thread类的话就可以,而这个好像就不行。为什么?

热心网友

恩呢,加油,好好学习

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com