62,614
社区成员
发帖
与我相关
我的任务
分享
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class line3 implements Runnable{
private CountDownLatch cd;
private int id;
public line3(CountDownLatch cd,int id){
this.cd=cd;
this.id=id;
}
public void run() {
try {
TimeUnit.MILLISECONDS.sleep(id*1000);//doSomeThing...
cd.countDown();//这样子不是和CyclicBarrier效果一样...
System.out.println("countDown"+id);
cd.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("line3 "+id);
}
public static void main(String[] args) {
CountDownLatch cd=new CountDownLatch(10);
ExecutorService es=Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
es.execute(new line3(cd,i));
}
es.shutdown();
}
}
import java.util.concurrent.*;
public class line3 implements Runnable{
private CountDownLatch cd;
private int id;
public line3(CountDownLatch cd,int id){
this.cd=cd;
this.id=id;
}
public void run() {
try {
TimeUnit.MILLISECONDS.sleep(id*1000);
cd.countDown();
System.out.println("countDown "+id);
cd.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("line "+id+" Dead");
}
public static void main(String[] args) {
final CountDownLatch cd=new CountDownLatch(10);
final ExecutorService es=Executors.newCachedThreadPool();
for (int i = 0; i < 9; i++) {
es.execute(new line3(cd,i));
}
es.execute(new Runnable() {
@Override
public void run() {
try {
TimeUnit.MILLISECONDS.sleep(9*1000);
cd.countDown();
System.out.println("countDown "+9);
cd.await();
for (int i = 10; i < 20; i++) {//这里id为10-20区别于前10个进程,但是等待的时间稍有点长
es.execute(new line3(cd,i));
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
try {
TimeUnit.SECONDS.sleep(15);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
es.shutdown();
System.out.println("main Dead");
}
}
import java.util.concurrent.*;
public class line2 {
final CyclicBarrier barrier;
//线程数
int count;
class Worker implements Runnable{
int index;
Worker(int index){
this.index = index;
}
public void run() {
System.out.println("第" + index + "个线程休眠"+(2 * index)+"秒!");
try {
Thread.sleep(2000 * index);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("第" + index + "个线程结束休眠!");
try {
//等待其它线程都处理完毕后,再继续以下代码的执行
barrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("第" + index + "个线程继续剩下的任务");
}
}
public line2(int count){
this.count = count;
//公共屏障点 等待到5个线程后,执行相应的barrierAction
barrier = new CyclicBarrier(count, new Runnable() {
public void run(){
System.out.println("全部线程已执行完毕!");
System.out.println("----------------------");
for(int i=1;i<=5;i++){ //当全部线程执行完,重新添加线程,重用CyclicBarrier对象
new Thread(new Worker(i)).start();//此程序无限循环需手动结束
}
try {
TimeUnit.MILLISECONDS.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
for(int i=1;i<=5;i++){
new Thread(new Worker(i)).start();
}
}
public static void main(String[] args) {
new line2(5);
}
}