JUC读写锁
作者:互联网
/** * 读写锁:一个资源可以被多个读线程访问,也可以被多个写线程访问,但是不能同时存在读和写两个线程 * 读读可以共享,读写不能共存,写写不能共存,Synchronized和Lock都是可重入锁 * synchronized是一个关键字,由系统帮助我们释放锁,Lock是一个类,需要我们手动加锁 * 手动释放锁,如果忘记释放锁,线程会进入到死锁的状态,死锁的原因:资源分配不当, * 资源不足,死锁的现象:多个线程,占据对方需要同步的资源,同时在等待对方,释放自己 * 需要同步的资源 */ ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); Lock readLock = readWriteLock.readLock(); Lock writeLock = readWriteLock.writeLock(); for (int i = 0; i < 5; i++) { new Thread(() -> { writeLock.lock(); try { System.out.println(Thread.currentThread().getName()+"\t开始写数据"); try { TimeUnit.SECONDS.sleep(new Random().nextInt(5)); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"\t写完数据"); } finally { writeLock.unlock(); } }, String.valueOf(i)).start(); } for (int i = 0; i < 5; i++) { new Thread(() -> { readLock.lock(); try { System.out.println(Thread.currentThread().getName()+"\t开始读数据"); try { TimeUnit.SECONDS.sleep(new Random().nextInt(5)); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"\t读完数据"); } finally { readLock.unlock(); } }, String.valueOf(i)).start(); }
标签:JUC,currentThread,Thread,读写,System,线程,new,out 来源: https://blog.csdn.net/cnmcnmcnmdb/article/details/122453607