BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #47699同步于 2016/1/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Java多线程运算结果的返回

gxlihao
2016/1/25镜像同步15 回复
写Java中,一个线程启动另一个线程,第二个线程如何将运算的结果返回给第一个线程?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2016/1/25
如果一个线程启动另一个线程的话,join就行了。 class Main { public static int result = 0; public static void main(String[] args) { Thread t2 = new Thread(() -> int s = 0; for (int i=0;i<100;i++) { s += i; } result = s; }); t2.start(); t2.join(); // 等待t2; System.out.println(result); // join之后,保证能看到t2写入的结果。 } }
gxlihao机器人#2 · 2016/1/25
如果使用join()函数,那么多线程还有什么意义呢,干嘛不将两个线程的逻辑合并为一个? 【 在 nuanyangyang 的大作中提到: 】 : 如果一个线程启动另一个线程的话,join就行了。 : [code=java] : class Main { : ...................
icybee机器人#3 · 2016/1/25
接口实现异步回调
nuanyangyang机器人#4 · 2016/1/25
【 在 gxlihao 的大作中提到: 】 : 如果使用join()函数,那么多线程还有什么意义呢,干嘛不将两个线程的逻辑合并为一个? : 可以创建多个线程然后join。 class Job extends Runnable { private int[] array; private int from, to; public int result; public Job(int[] array, int from, int to) { this.array = array; this.from = from; this.to = to; } @Override public void run() { int sum = 0; for (int i=from; i<to; i++) { sum += i; } result = sum; } } public class Main { public static void main(String[] args) { int[] array = new int[10000]; // populate the array here Job[] jobs = Job[4]; Thread[] threads = new Thread[4]; for (int i=0; i<4; i++) { jobs[i] = new Job(array, i*2500, (i+1)*2500) threads[i] = new Thread(jobs[i]); threads[i].start(); } // 现在4个线程在一起跑。 int sum = 0; for (int i=0; i<4; i++) { // 然后我们一个一个地等待。 threads[i].join(); // 即使是串行一个个等待, sum += jobs[i].results; } // 但无论如何,主线程也要在这4个中最慢的一个结束之后才能完成等待。 // 所以按什么顺序等待并不是问题。 System.out.println(sum); } }
lixing机器人#5 · 2016/1/25
FutureTask解决你的难题
aiquestion机器人#6 · 2016/1/25
用Thread是不是太裸了。丢到线程池里用Future比较好吧。 【 在 nuanyangyang 的大作中提到: 】 : 如果一个线程启动另一个线程的话,join就行了。 : [code=java] : class Main { : ...................
nuanyangyang机器人#7 · 2016/1/25
【 在 aiquestion 的大作中提到: 】 : 用Thread是不是太裸了。丢到线程池里用Future比较好吧。 嗯嗯。实际应用中当然用ThreadPoolExecutor+Callable+Future比较好了。
ffantastic机器人#8 · 2016/2/5
线程池可以满足你的需求,写callable代替runnable,返回future封装计算结果
tastier机器人#9 · 2016/2/5
暖神,直接线程间通信可以吗? 【 在 nuanyangyang 的大作中提到: 】 : : 嗯嗯。实际应用中当然用ThreadPoolExecutor+Callable+Future比较好了。