import java.util.Random;
import java.util.concurrent.CountDownLatch;
public class Test11 {
public static void main(String[] args) throws InterruptedException {
Runnable task = new Runnable(){
@Override
public void run() {
try {
int rand = new Random().nextInt(1000);
Thread.sleep(rand);
System.out.println(Thread.currentThread().getName()+"##"+rand);
} catch (InterruptedException e) {e.printStackTrace();}
}
};
Test11 t = new Test11();
System.out.println("共执行时间:"+t.timeTask(3, task));
}
public long timeTask(int ThreadNum,final Runnable task) throws InterruptedException{
final CountDownLatch startGete = new CountDownLatch(1);
final CountDownLatch endGete = new CountDownLatch(ThreadNum);
for(int i=0; i<ThreadNum; i++){
new Thread(){
public void run(){
try {
startGete.await();
task.run();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
endGete.countDown();
}
}
}.start();
}
long start = System.currentTimeMillis();
startGete.countDown();
endGete.await();
long end = System.currentTimeMillis();
return end - start;
}
/**
* 运行结果:因为三个线程并行执行所以不会比最大的执行时间多很多
* Thread-1##108
Thread-2##125
Thread-0##662
共执行时间:672
*/
}
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.atomic.AtomicInteger;
public class Test12 {
public static void main(String[] args) throws InterruptedException {
Runnable task = new Runnable(){
@Override
public void run() {
try {
int rand = new Random().nextInt(1000);
Thread.sleep(rand);
System.out.println(Thread.currentThread().getName()+"##"+rand);
} catch (InterruptedException e) {e.printStackTrace();}
}
};
Test12 t = new Test12();
System.out.println("共执行时间:"+t.timeTask(3, task));
}
public long timeTask(int ThreadNum,final Runnable task) throws InterruptedException{
final CyclicBarrier endGete = new CyclicBarrier(ThreadNum);
long start = System.currentTimeMillis();
final AtomicInteger count = new AtomicInteger(3);
for(int i=0; i<ThreadNum; i++){
new Thread(){
public void run(){
try {
endGete.await();
task.run();
} catch (Exception e) {
e.printStackTrace();
}finally{
count.decrementAndGet() ;
}
}
}.start();
}
while(count.get() > 0){
// System.out.println("等待.......");
}
long end = System.currentTimeMillis();
return end - start;
}
/**
* 运行结果:因为三个线程并行执行所以不会比最大的执行时间多很多
Thread-1##86
Thread-2##331
Thread-0##663
共执行时间:672
*/
}