1.同步计数器中有一个await()方法,只有当前线程在程序计数器倒计时为0时,线程才不会进入阻塞状态,如果当前线程是主线程main,那也只能等到程序计数器的conunt为0时才会进入就绪状态
2.使用场景:
只有当所有的线程上传完文件时,才是真正的弹出文件上传完毕
4.文件上传类:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class UploadsFile extends Thread{
private String fileName;
private CountDownLatch latch;
public UploadsFile(String fileName,CountDownLatch latch){
this.fileName=fileName;
this.latch=latch;
}
@Override
public void run() {
try {
System.out.println(fileName+":开始上传.");
TimeUnit.SECONDS.sleep(2);
System.out.println(fileName+":上传完成.");
latch.countDown();//上传完成
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试文件上传:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTestLei{
public static void main(String[] args) throws InterruptedException {
//生成3个辅助计时类
CountDownLatch latch=new CountDownLatch(3);
//进行3个文件上传
UploadsFile file1=new UploadsFile("文件1",latch);
UploadsFile file2=new UploadsFile("文件2",latch);
UploadsFile file3=new UploadsFile("文件3",latch);
file1.start();
file2.start();
file3.start();
// 只有当,countDown()到为0时才会输出最后一句话
latch.await();
System.out.println("文件传输完成");
}
}