其他分享
首页 > 其他分享> > JUC读写锁

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