java一个线程在另外3个线程执行完后执行,怎么写

Oversdownload 2017-07-09 10:08:29
如题,求大神忙里抽闲给解疑下,谢谢。
...全文
519 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
soton_dolphin 2017-07-10
  • 打赏
  • 举报
回复
用 cyclicBarrier
Jcon_ 2017-07-10
  • 打赏
  • 举报
回复
package count_down_latch;

import java.util.Date;
import java.util.concurrent.CountDownLatch;

public class Test {

	public static void main(String[] args) throws InterruptedException {
		CountDownLatch latch = new CountDownLatch(3);
		Worker worker1 = new Worker("zhangsan", 5000, latch);
		Worker worker2 = new Worker("lisi", 8000, latch);
		Worker worker3 = new Worker("wangwu", 10000, latch);
		worker1.start();
		worker2.start();
		worker3.start();
		latch.await(); // 等待所有工人完成工作
		System.out.println("all work done at " + new Date());
		
	}
}

class Worker extends Thread{
	String workerName;
	int workerTime;
	CountDownLatch latch;
	
	public Worker(String workerName, int workerTime, CountDownLatch latch) {
		this.workerName = workerName;
		this.workerTime = workerTime;
		this.latch = latch;
	}
	
	@Override
	public void run() {
		System.out.println("worker " + workerName + " do work begin at " + new Date());
		doWork(); // 工作了
		System.out.println("woker " +workerName + " do work end at " + new Date());
		 latch.countDown();//工人完成工作,计数器减一  
	}
	
	private void doWork(){
		try {
			Thread.sleep(workerTime);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
  • 打赏
  • 举报
回复
thread.join()
X元素 2017-07-10
  • 打赏
  • 举报
回复
利用CountDownLatch 可以解决。
李德胜1995 2017-07-10
  • 打赏
  • 举报
回复
Thread的join(),java.util.concurrent包下的CountDownLatch和CyclicBarrier都可以做。。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧