• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

8.1 减少计数CountDownLatch

闭锁类可以设置一个计数器,然后通过倒数计秒方法来进行减一的操作,使用等待方法等待计数器不大于0 ,然后继续执行等待方法之后的语句。

CountDownLatch主要有两个方法,当一个或多个线程调用等待方法时,这些线程会阻塞

其它线程调用倒数计秒方法会将计数器减1(调用倒数计秒方法的线程不会阻塞)。

当计数器的值变为0时,因等待方法阻塞的线程会被唤醒,继续执行。

场景: 6个同学陆续离开教室后值班同学才可以关门。

CountDownLatchDemo

josnkjbmrok6162.png

包JUC.jucAssist

导入Java。util。并发。countdownlatch

//演示闭锁

公共类CountDownLatchDemo {

//6个同学陆续离开教室之后,班长才可以锁门

公共静态void main(String[] args)引发中断的异常{

//创建闭锁对象,设置初始值

CountDownLatch CountDownLatch=new CountDownLatch(6);

//6个同学陆续离开教室

for(int I=1;I=6;i ) {

新线程(()- {

系统。出去。println(线程。当前线程().getName()'号同学离开了教室');

//计数-1

countdownlatch。倒计时();

},String.valueOf(i)).start();

}

//等待

countdownlatch。await();

系统。出去。println(线程。当前线程().getName()'班长锁门走人了');

}

}

8.2 循环栅栏CycliBarrier

栅栏看英文单词可以看出大概就是循环阻塞的意思,在使用中栅栏的构造方法第一个参数是目标障碍数,每次执行栅栏一次障碍数会加一,如果达到了目标障碍数,才会执行cyclicBarrier.awai()之后的语句。可以将栅栏理解为加一操作。

场景:集齐7颗龙珠就可以召唤神龙

CyclicBarrierDemos

包JUC.jucAssist

导入Java。util。并发。环状屏障;

//集齐七颗龙珠就可以召唤神龙

公共类CyclicBarrierDemo {

//创建固定值

私有静态最终(同Internationalorganizations)国际组织数=7;

公共静态void main(String[] args) {

//创建栅栏

循环屏障循环屏障=新的环状屏障(编号,()- {

System.out.println('**** ')集齐七颗龙珠就可以召唤神龙');

});

//集齐七颗龙珠过程

for(int I=1;I=7;i ) {

新线程(()- {

系统。出去。println(线程。当前线程().getName()'星龙珠被收集到了!');

尝试{

环状屏障。await();

} catch(异常e) {

e。printstacktrace();

}

},String.valueOf(i)).start();

}

}

}

8.3 信号灯Semaphore

包JUC.jucAssist

导入Java。util。随机;

导入Java。util。并发。旗语;

导入Java。util。并发。时间单位;

//6辆汽车,停3个车位

公共类SemaphoreDemo {

公共静态void main(String[] args) {

//创建旗语,设置许可数量

信号量信号量=新信号量(3);

//创建6辆汽车

for(int I=1;I=6;i ) {

新线程(()- {

//抢占

尝试{

旗语。获取();

系统。出去。println(线程。当前线程().getName()'抢到了车位');

//设置随机停车时间

时间单位9.25秒. sleep(新随机()。nextInt(5));

系统。出去。println(线程。当前线程().getName() ' -离开了车位');

} catch (InterruptedException e) {

e。printstacktrace();

}最后{

//释放

semaphore.release()。

}

},String.valueOf(i)).start();

}

}

}

Link to comment
Share on other sites