精确通知,顺序访问——Lock锁比synchronized锁的优势之处
生活随笔
收集整理的这篇文章主要介绍了
精确通知,顺序访问——Lock锁比synchronized锁的优势之处
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题目如下:
多线程之间按顺序调用,实现A-》B-》C
三个线程启动,要求如下:
AA 打印5次,BB 打印10次,CC 打印15次
接着
AA 打印5次,BB 打印10次,CC 打印15次
......来10轮
package com.dym.juc;import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;class ShareResource{private int number=1; //1:A 2:B 3:Cprivate Lock lock=new ReentrantLock();private Condition condition1=lock.newCondition();private Condition condition2=lock.newCondition();private Condition condition3=lock.newCondition();public void print5(){lock.lock();try {//1. 判断while (number!=1){condition1.await();}//2. 干活for (int i = 1; i <=5 ; i++) {System.out.println(Thread.currentThread().getName()+"\t"+i);}//3. 通知number=2;condition2.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void print10(){lock.lock();try {//1. 判断while (number!=2){condition2.await();}//2. 干活for (int i = 1; i <=10 ; i++) {System.out.println(Thread.currentThread().getName()+"\t"+i);}//3. 通知number=3;condition3.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void print15(){lock.lock();try {//1. 判断while (number!=3){condition3.await();}//2. 干活for (int i = 1; i <=15 ; i++) {System.out.println(Thread.currentThread().getName()+"\t"+i);}//3. 通知number=1;condition1.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}} }// 多线程之间按顺序调用,实现A-》B-》C // 三个线程启动,要求如下: // AA 打印5次,BB 打印10次,CC 打印15次 // 接着 // AA 打印5次,BB 打印10次,CC 打印15次 // ......来10轮 /*1 高内聚低耦合的前提下,线程操作资源类2 判断/干活/通知3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)4 标志位 */public class ThreadOrderAccess {public static void main(String[] args) {ShareResource shareResource=new ShareResource();new Thread(()->{for (int i = 1; i <=10 ; i++) {shareResource.print5();}},"AA").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {shareResource.print10();}},"BB").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {shareResource.print15();}},"CC").start();} }
总结
以上是生活随笔为你收集整理的精确通知,顺序访问——Lock锁比synchronized锁的优势之处的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 线程间定制化调用通信—— 1 高内聚低
- 下一篇: JUC里面的相关分类|| java并发