第4章 线程间定制化通信
作者:互联网
线程间定制化通信
方案:给每个线程定义一个标志位。
package JUC.lock; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //第一步 创建资源类,定义属性和操作方法 class ShareResource { //定义标志位 private int flag = 1;// 1 AA 2 BB 3 CC //创建Lock锁 final Lock lock = new ReentrantLock(); //创建三个condition final Condition c1 = lock.newCondition(); final Condition c2 = lock.newCondition(); final Condition c3 = lock.newCondition(); //打印5次,参数第几轮 public void print5(int loop) throws InterruptedException { //上锁 lock.lock(); try{ //判断 while(flag != 1){ c1.await(); } //干活 for (int i = 1; i <= 5; i++) { System.out.println(Thread.currentThread().getName()+" :: "+i+" :轮数: "+loop); } //修改标志位 flag = 2; //通知 c2.signalAll(); } finally { //解锁 lock.unlock(); } } //打印10次,参数第几轮 public void print10(int loop) throws InterruptedException { //上锁 lock.lock(); try{ //判断 while(flag != 2){ c2.await(); } //干活 for (int i = 1; i <= 10; i++) { System.out.println(Thread.currentThread().getName()+" :: "+i+" :轮数: "+loop); } //修改标志位 flag = 3; //通知 c3.signalAll(); } finally { //解锁 lock.unlock(); } } //打印15次,参数第几轮 public void print15(int loop) throws InterruptedException { //上锁 lock.lock(); try{ //判断 while(flag != 3){ c3.await(); } //干活 for (int i = 1; i <= 15; i++) { System.out.println(Thread.currentThread().getName()+" :: "+i+" :轮数: "+loop); } //修改标志位 flag = 1; //通知 c1.signalAll(); } finally { //解锁 lock.unlock(); } } } public class ThreadDemo3 { public static void main(String[] args) { ShareResource shareResource = new ShareResource(); new Thread(() -> { for (int i = 1; i <= 10; i++) { try { shareResource.print5(i); } catch (InterruptedException e) { e.printStackTrace(); } } },"AA").start(); new Thread(() -> { for (int i = 1; i <= 10; i++) { try { shareResource.print10(i); } catch (InterruptedException e) { e.printStackTrace(); } } },"BB").start(); new Thread(() -> { for (int i = 1; i <= 10; i++) { try { shareResource.print15(i); } catch (InterruptedException e) { e.printStackTrace(); } } },"CC").start(); } }
标签:int,lock,通信,locks,线程,newCondition,定制,final,Condition 来源: https://www.cnblogs.com/RobertYu666/p/16217778.html