java多线程工具
java.util.concurrent并发工具包:
1 倒计时 CountDownLatch,主线程在countdownlatch上等待,检查所有任务完成 后继续执行:
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchDemo implements Runnable {
static final CountDownLatch countDownLatch = new CountDownLatch(10);
static final CountDownLatchDemo demo = new CountDownLatchDemo();
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(new Random().nextInt(10) * 1000);
System.out.println("check complete");
countDownLatch.countDown();// 倒计时减1
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
ExecutorService excutor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
excutor.submit(demo);
}
try {
countDownLatch.await();//等待倒计时减到0
System.out.println("结束");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
excutor.shutdown();
}
}
2:Cyclicbarrier
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CyclicbarrierDemo {
public static class Worker implements Runnable{
private final CyclicBarrier cyclicBarrier;
public Worker(CyclicBarrier cyclicBarrier){
this.cyclicBarrier=cyclicBarrier;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
cyclicBarrier.await();//等待
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("id="+Thread.currentThread().getId()+",name="+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
ExecutorService excutors=Executors.newFixedThreadPool(10);
CyclicBarrier cyclicBarrier=new CyclicBarrier(10,new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("全部到达!");
}
});
for(int i=0;i<10;i++){
excutors.submit(new Worker(cyclicBarrier));
}
}
}