0


ReentrantLock可重入锁

可重⼊锁,这个锁可以被线程多次重复进⼊进⾏获取操作。
ReentantLock继承接⼝Lock并实现了接⼝中定义的⽅法,除了能完成synchronized所能完成的所有⼯作 外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的⽅法。
在并发量较⼩的多线程应⽤程序中,ReentrantLock与synchronized性能相差⽆⼏,但在⾼ 并发量的条件下,synchronized性能会迅速下降⼏⼗倍,⽽ReentrantLock的性能却能依然维持⼀个⽔ 准。
因此我们建议在⾼并发量情况下使⽤ReentrantLock。

importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;publicclassCounter{privatefinalLock lock =newReentrantLock();privateint count =0;publicvoidincrement(){
        lock.lock();// 获取锁try{
            count++;}finally{
            lock.unlock();// 释放锁}}publicintgetCount(){return count;}publicstaticvoidmain(String[] args){Counter counter =newCounter();// 创建两个线程,模拟并发访问共享资源Thread t1 =newThread(()->{for(int i =0; i <1000; i++){
                counter.increment();}});Thread t2 =newThread(()->{for(int i =0; i <1000; i++){
                counter.increment();}});

        t1.start();
        t2.start();// 等待两个线程执行完毕try{
            t1.join();
            t2.join();}catch(InterruptedException e){
            e.printStackTrace();}System.out.println("Final count is: "+ counter.getCount());}}
publicclassCounter{privateint count =0;// 使用 synchronized 关键字修饰方法,确保线程安全publicsynchronizedvoidincrement(){
        count++;}publicintgetCount(){return count;}publicstaticvoidmain(String[] args){Counter counter =newCounter();Thread t1 =newThread(()->{for(int i =0; i <1000; i++){
                counter.increment();}});Thread t2 =newThread(()->{for(int i =0; i <1000; i++){
                counter.increment();}});

        t1.start();
        t2.start();try{
            t1.join();
            t2.join();}catch(InterruptedException e){
            e.printStackTrace();}System.out.println("Final count is: "+ counter.getCount());}}
标签: java 开发语言

本文转载自: https://blog.csdn.net/qq_43954910/article/details/139783418
版权归原作者 miss writer 所有, 如有侵权,请联系我们删除。

“ReentrantLock可重入锁”的评论:

还没有评论