- 优势是获得同步代码块的方式更加的灵活了,之前使用的同步代码块的锁是概念意义上的锁,是java对象内部的锁,而这锁是java为了实现同步,专门实现的锁。
- lock 获得当前同步代码块的锁,如果该锁被占用,该线程就进入阻塞状态
- tryLock()当前线程试图获得同步代码块的锁,如果锁被其他线程所占用,那么立即返回false,否则返回true。
tryLock(long time,TimeUnit unit)尝试获得代码块的锁,如果能获得,立即返回true,否则进入阻塞状态,如果在规定的时间内获得锁,则返回true,否则返回false。
public class Study extends Thread{ private Machine machine; private static final Lock mainLock=new ReentrantLock(); @Override public void run() { mainLock.lock(); try{ machine.add(); System.out.println(getName()); machine.plus(); System.out.println("data=="+machine.getData()); }catch(Exception e){ System.out.println("异常"); e.printStackTrace(); }finally{ mainLock.unlock(); } } public Study(Machine machine){ this.machine=machine; } public static void main(String[] args) { Machine machine=new Machine(); for(int i=0;i<10;i++){ Thread thread=new Study(machine); thread.start(); } } } class Machine{ private int data=100; public void plus(){ data--; } public void add(){ data++; } public int getData() { return data; } }
Lock外部锁
最新推荐文章于 2024-07-05 01:52:34 发布