显式锁Lock、ReentrantLock
来源:互联网 发布:淘宝密码修改 编辑:程序博客网 时间:2024/06/08 16:40
java有两种锁,隐式锁(synchronized)和显式锁(Lock),两种锁都能实现对共享资源的控制,但显式锁更加灵活。
本文主要介绍:Lock和其实现类ReentrantLock的使用方式
Lock接口
public interface Lock{void lock(); // 获取锁void lockInterruptibly(); // 优先考虑响应中断,而不是获取锁;使用此方式获的锁,允许在等待时由其他线程的通过Thread.interrupt()方法来中断等待线程而直接返回void tryLock(); // 如果锁可用,则获取锁,并立即返回值 true,否则返回falsevoid tryLock(long timeout,TimeUnit unit); // 在等待时间内如果锁可用,则获取锁,成功返回true,否则返回falsevoid unlock(); // 释放锁Condition newCondition(); // 得到绑定到此 Lock 实例的新 Condition 实例}
Lock的使用方式
//默认为false,即非公平锁,true为公平锁public static Lock lock=new ReentrantLock(false); 方式一: lock.lock(); //获得锁 try{ ... }finally(){ lock.unLock(); //释放锁 }方式二: if(lock.tryLock()){ try{ ... }finally(){ lock.unLock(); //释放锁 } }else{ //获取锁失败 }方式三: lock.lockInterruptibly(); //获得锁,中断有限 try{ ... }finally(){ lock.unLock(); //释放锁 }
condition是一个多线程间协调通信的工具类,通过condition我们能控制多个线程的等待(await())和唤醒(signal())
public class Demo{ public static Lock lock=new ReentrantLock(); public static Condition full = lock.newCondition(); public static Condition empty = lock.newCondition(); public static List =new ArrayList(); public void full(){ whlie(true){ lock.lock(); //获得锁 try{ if(list.size>0){ System.out.println("full等待"); full.await(); }else{ list.add(1); System.out.println("empty唤醒"); empty.signal(); } }finally(){ lock.unLock(); //释放锁 } } } public void empty(){ while(true){ lock.lock(); //获得锁 try{ if(list.size<1){ System.out.println("empty等待"); empty.await(); }else{ list.remove(0); System.out.println("full唤醒"); full.signal(); } }finally(){ lock.unLock(); //释放锁 } } } public void main(String[] args) throws Exception{ final Demo demo=new Demo(); new Thread(new Runnable(){ public void run(){ demo.full(); } }).start(); new Thread(new Runnable(){ public void run(){ demo.empty(); } }).start(); }}
0 0
- 显式锁Lock、ReentrantLock
- 分析ReentrantLock之lock
- 码农小汪-ReentrantLock-lock方法
- Lock与ReentrantLock
- sychronized、lock、reentrantLock分析
- sychronized、ReentrantLock、lock区别
- Lock的使用---ReentrantLock
- 【Java基础】线程笔记——显式锁Lock和ReentrantLock
- ReentrantLock代码剖析之ReentrantLock.lock
- ReentrantLock代码剖析之ReentrantLock.lock
- Java Concurrent Lock ReentrantLock简介
- synchronized和lock(reentrantlock) 区别
- synchronized和lock(reentrantlock) 区别
- 显示锁Lock和ReentrantLock
- Lock ReentrantLock tryLock condtion 用法
- java中的锁-Lock-ReentrantLock
- concurrent-4-AQS-ReentrantLock-Lock
- ReentrantLock(二)Lock.unlock()分析
- Swift - 页面传值
- BZOJ 1833
- 构建者模式
- linux 下链接mysql练习
- 解析校内网邮箱
- 显式锁Lock、ReentrantLock
- 带标题可拖动的SeekBar
- Filezilla--FZ怎么强制出现隐藏文件
- BZOJ3223文艺平衡树
- 118. Pascal's Triangle
- 文章标题
- C++中值传递、指针传递、引用传递的总结
- Android多媒体播放器 MediaPlayer使用
- 窗口间的通信(消息互发与数据传递)