如何自己实现一把锁?(JAVA)

本文探讨了如何基于AQS(AbstractQueuedSynchronizer)实现Java锁。通过实现Lock接口,创建同步器sync作为内部类,并重写tryAcquire(), tryRelease()和isHeldExclusively()方法。注意在isHeldExclusively()中不能仅依赖getState()==1进行判断,因为state可能被set方法修改。使用模板方法,通过sync.acquire()调用AQS的acquire()实现锁的获取。最后提到可以参考ReentrantLock的公平锁和非公平锁实现进行深入学习。" 6128168,1004544,Linux内核与用户态通信:Netlink套接字详解,"['Linux', '内核开发', '网络通信', '套接字编程', '数据结构']
摘要由CSDN通过智能技术生成

java.util.concurrent.locks下的锁其实都是基于AQS(AbstractQueuedSynchronizer)实现的。
尝试着自己写一下:
1.implements Lock,
2.然后自己写一个同步器sync继承AbstractQueuedSynchronizer
(一般建议同步器写成一个内部类)

  • 实现tryAcquire(int);
  • 实现tryRelease(int);
  • 实现isHeldExclusively();

3.利用sync实现Lock接口的lock(),unlock()方法。

class MyLock implements Lock{
   
	MySync sync=new MySync();


	@Override
	public void lock() {
   
		sync.acquire(1);
	}

	@Override
	public void lockInterruptibly() throws InterruptedException {
   
		
	}

	@Override
	public boolean tryLock() {
   
		return false;
	}

	@Override
	public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
   
		return false;
	}

	@Override
	public void unlock
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值