发布网友
共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类的话就可以,而这个好像就不行。为什么?
热心网友
恩呢,加油,好好学习