thread join 的尝试

前端时间,听同事说了thread join 这个方法,遂尝试了下。

测试代码如下:

public class TestThreadJoin {

	public static boolean testJoinTime = true;

	public static void main(String[] args) {
		int all = 5;
		Thread[] ts = new Thread[all];

		long start_time = System.currentTimeMillis();
		for (int a = 0; a < all; a++) {
			final int tmp = a ;
			ts[a] = new Thread(new Tjoin(tmp));
			ts[a].start();
		}
		for(Thread t : ts){
			try {
				if(TestThreadJoin.testJoinTime){
					t.join(20000L);
				}else{
					t.join();
				}
			} catch (InterruptedException e) {
			}
		}
		System.out.println("..........all is ok........用时:"+ (System.currentTimeMillis() - start_time));

		for(Thread t : ts){
			t.interrupt();
		}
	}

	static class Tjoin implements Runnable {

		long wait_time = 0;

		long start_time = 0;

		public Tjoin() {
		}

		public Tjoin(int wait_time) {
			this.wait_time = wait_time;
			this.start_time = System.currentTimeMillis();
		}

		@Override
		public void run() {
			if(wait_time == 4){
				try {
					if(TestThreadJoin.testJoinTime){
						Thread.sleep(1000000L);
					}
				} catch (InterruptedException e) {
					System.err.println("我被终止了。。。");
				}
			}
			try {
				Thread.sleep(wait_time * 1000);
//				System.out.println("线程 "+ wait_time);
			} catch (InterruptedException e) {
			}
			System.out.println("线程 "+ wait_time+ " 结束了...用时:"+ (System.currentTimeMillis() - start_time));
		}

	}

}


当testJoinTime 为false时,输出结果如下:

线程 0 结束了...用时:0
线程 1 结束了...用时:1000
线程 2 结束了...用时:2000
线程 3 结束了...用时:3000
线程 4 结束了...用时:4000
..........all is ok........用时:4000


以前不知道有该方法,都是采取在run方法结束时,改变全局或者外部标志位的方式,来确认所有线程的完成情况。

现在有了这个方法,妈妈再也不担心我判断线程是否运行结束了。。。


后续又做了 join(long millis) 方法的测试,设置testJoinTime 为true,输出结果如下:

线程 0 结束了...用时:0
线程 1 结束了...用时:1000
线程 2 结束了...用时:2000
线程 3 结束了...用时:3000
..........all is ok........用时:23016
我被终止了。。。
线程 4 结束了...用时:27000


因为工作涉及的技术比较单调。。所以也写不出太具体的用处。

但是个人感觉,如果有以下需求时,可以利用这个东东:

1、处理大量数据,又对时效性需求较高,一般可用join(),但是如果对时间要求更严苛,则可以用join(long millis) 控制总体时间;

2、多线程协同任务时,最终结果输出为多线程输出结果的加和。。


第一次写文章,废话比较多。。。慢慢努力吧~致力于成为一个成功的屌丝!


辛苦大家的眼睛了。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值