300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java线程执行顺序执行_Java多线程系列四——控制线程执行顺序

java线程执行顺序执行_Java多线程系列四——控制线程执行顺序

时间:2020-09-26 08:45:27

相关推荐

java线程执行顺序执行_Java多线程系列四——控制线程执行顺序

importjava.util.concurrent.CountDownLatch;importorg.junit.Assert;importorg.junit.Test;/*** @Description: 规定线程次序的方法*/

public classThreadOrderTest {private long millisUnit = 1000;private int count = 2;classThreadOrder {/*** join方法使多个线程依次执行

*

*@return*@throwsInterruptedException*/

public long preserveOrderViaJoin() throwsInterruptedException {long startMillis =System.currentTimeMillis();

Thread tmp;for (int i = 0; i < count; i++) {

tmp= new Thread(newRunnable() {

@Overridepublic voidrun() {try{

Thread.sleep(millisUnit);

}catch(InterruptedException e) {

e.printStackTrace();

}

}

},"join-" +i);

tmp.start();

tmp.join();//不停地检测线程是否执行完成,执行完成才继续往下

}return System.currentTimeMillis() -startMillis;

}/*** CountdownLatch可同时阻塞多个线程,但它们可并发执行

*

*@return*@throwsInterruptedException*/

public long preserveOrderViaCountdownLatch() throwsInterruptedException {long startMillis =System.currentTimeMillis();final CountDownLatch countDownLatch = newCountDownLatch(count);for (int i = 0; i < count; i++) {new Thread(newRunnable() {

@Overridepublic voidrun() {try{

Thread.sleep(millisUnit);

}catch(InterruptedException e) {

e.printStackTrace();

}

countDownLatch.countDown();//只要计数器清零,等待的线程就可以开始执行,于是可以达到并发的效果

}

},"countDownLatch-" +i).start();

}

countDownLatch.await();return System.currentTimeMillis() -startMillis;

}

}

@Testpublic void testPreserveOrderViaJoin() throwsInterruptedException {

ThreadOrder threadOrder= newThreadOrder();

Assert.assertEquals(count, threadOrder.preserveOrderViaJoin()/millisUnit);

}

@Testpublic void testPreserveOrderViaCountdownLatch() throwsInterruptedException {

ThreadOrder threadOrder= newThreadOrder();

Assert.assertEquals(1, threadOrder.preserveOrderViaCountdownLatch() /millisUnit);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。