Java-可重入锁(ReentrantLock)

本文深入探讨了可重入锁的特性和用法,包括其构造方法、常见操作如lock和unlock,以及如何通过tryLock进行尝试性锁获取。文章还展示了如何在实际代码中使用ReentrantLock来控制多线程的并发执行。
可重入锁:与同步锁(Synchronize)语义行为基本相同,但有更强大的功能
        获取锁公平设置、测试锁 tryLock 、锁的获取顺序等等。
构造方法:

1.ReentrantLock()//创建一个可重入锁

2.ReentrantLock(boolean fair)//带公平策略锁,默认为false,是种非公平模式。
常用方法:

1.void lock()  请求加锁
2.void unlock()  尝试释放该锁
3.Boolean tryLock()  尝试获得锁,仅在无其他线程持有锁时得到该锁
4.int getHoldCount()  由当前线程持有,锁数。
5.protected Thread getOwner()
6.protected Collection<Thread> getQueuedThreads() 返回试图获得该锁的线程集合
7.Boolean isHeldCurrentThread() 判断锁是否被当前线程持有
8.Boolean isLocked() 查看锁是否被持有。
自己实现:

public class Man {

    volatile static int i=0;

    private Lock lock;

    public Man(){
        lock = new ReentrantLock();
    }

    public  void eat(){
        System.out.println("人吃饭..."+i);
    }
    public  void work(){
        System.out.println("人工作..."+i);
    }
    public  void sleep(){
        System.out.println("人睡觉..."+i);
    }

    public void life(){
        lock.lock();
        eat();
        work();
        sleep();
        try{

        }catch (Exception e){

        }finally {
            lock.unlock();
        }
    }
}

-----------------------------------------------------------------

public class Reentrant {


    @Test
    public void Test() {
        ExecutorService executor = new ThreadPool().getCachedThreadPool();
        Man man = new Man();

        for(int i=0;i<4;i++){
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    man.life();
                    Man.i++;
                }
            });
        }

        executor.shutdown();
        try {
            executor.awaitTermination(1,TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值