近期在看java 多线程的内容,学习了Lock的基本使用方法,作为记录写个博客:
ReentrantLock 集成自Lock接口,实现同步主要是使用lock.lock().方法实现同步块,但是lock锁需要手动释放,使用结束后需要手动调用lock.unlock();
而且要配合try/finally 语句使用,这是阿里巴巴编码规范推荐的写法。
同时lock配合与之配套的Condition类可以实现notify(),wait(),之类的类似功能。上代码
public class MyCondition{
private Lock lock=new ReentrantLock();
private Condition condition=lock.newCondition();
public void awaitTest(){
lock.lock();
try {
System.out.println("awaitTest::"+System.currentTimeMillis());
condition.await();
System.out.println("被唤醒+"+System.currentTimeMillis());
}catch (Exception e){
}finally {
lock.unlock();
}
}
public void signalTest(){
lock.lock();
try {
System.out.println("我要唤醒");
condition.signal();
}catch (Exception e){
}finally {
lock.unlock();
}
}
public static void main(String[] args) {
MyCondition myCondition=new MyCondition();
ExecutorService executorService=new ThreadPoolExecutor(5,10,10, TimeUnit.SECONDS,new LinkedBlockingQueue<>());
Runnable r1=()->{
myCondition.awaitTest();
};
Runnable r2=()->{
myCondition.signalTest();
};
executorService.execute(r1);
executorService.execute(r2);
executorService.shutdown();
}
}