返回信息流写Java中,一个线程启动另一个线程,第二个线程如何将运算的结果返回给第一个线程?
这是一条镜像帖。来源:北邮人论坛 / java / #47699同步于 2016/1/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java多线程运算结果的返回
gxlihao
2016/1/25镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
如果一个线程启动另一个线程的话,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写入的结果。
}
}
如果使用join()函数,那么多线程还有什么意义呢,干嘛不将两个线程的逻辑合并为一个?
【 在 nuanyangyang 的大作中提到: 】
: 如果一个线程启动另一个线程的话,join就行了。
: [code=java]
: class Main {
: ...................
【 在 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);
}
}
用Thread是不是太裸了。丢到线程池里用Future比较好吧。
【 在 nuanyangyang 的大作中提到: 】
: 如果一个线程启动另一个线程的话,join就行了。
: [code=java]
: class Main {
: ...................
【 在 aiquestion 的大作中提到: 】
: 用Thread是不是太裸了。丢到线程池里用Future比较好吧。
嗯嗯。实际应用中当然用ThreadPoolExecutor+Callable+Future比较好了。
暖神,直接线程间通信可以吗?
【 在 nuanyangyang 的大作中提到: 】
:
: 嗯嗯。实际应用中当然用ThreadPoolExecutor+Callable+Future比较好了。