多线程(4)
作者:互联网
显示锁
1定义:显示声明的锁,比如reentrantlock
非显示锁sychronized
公平锁,非公平锁
1定义:这个是reentrantlock底层,默认为非公平锁,速度快
读写锁
1:reentrantlock的分为读写锁,口诀:读读共享,写写互斥,读写互斥 2:应用场景:多读写少的场景
阻塞与唤醒 Condition
1:对于同一个lock,可以加上Condition进行等待唤醒控制 2:比如生产者消费者问题:
package cn.enjoyedu.ch4.rw; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; public class Test1 { private static Lock lock = new ReentrantLock(); private static Condition notEmpty = lock.newCondition(); private static Condition notFull = lock.newCondition(); private static volatile int count = 0; public static void main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(6); pool.execute(new Gun(lock, notEmpty, notFull)); pool.execute(new Bullet(lock, notEmpty, notFull)); } public static class Gun implements Runnable { private Lock lock; private Condition notEmpty; private Condition notFull; public Gun(Lock lock, Condition notEmpty, Condition notFull) { this.lock = lock; this.notEmpty = notEmpty; this.notFull = notFull; } public void run() { while (true) { lock.lock(); while (count == 0) { try { notEmpty.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("射击---biubiubiu"); count--; notFull.signal(); lock.unlock(); } } } public static class Bullet implements Runnable { private Lock lock; private Condition notEmpty; private Condition notFull; public Bullet(Lock lock, Condition notEmpty, Condition notFull) { this.lock = lock; this.notEmpty = notEmpty; this.notFull = notFull; } public void run() { while (true) { lock.lock(); while (count >= 20) { try { notFull.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("压入子弹---铛铛"); count++; notEmpty.signal(); lock.unlock(); } } } }
标签:notEmpty,lock,private,多线程,public,Condition,notFull 来源: https://blog.51cto.com/u_12550160/2816587