源码如下

对比synchronized,synchronized使用时会显示的指定一个对象(方法为调用对象,代码块会需要对象作为参数),来获取一个对象的独占锁

而ReentrantLock可能就是使用的ReentrantLock对象的独占锁来实现锁的功能,所以不同线程要用同一个ReentrantLock对象来互斥

        public static void  main(String[] args){
doSync();
} private static void doSync() { MyThread myThread = new MyThread(); new Thread(myThread).start(); Thread tt = new Thread(myThread);
tt.start();
try {
Thread.sleep(1000, 0);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("try interuppt "); tt.interrupt(); }
class MyThread implements Runnable{
private ReentrantLock lock = new ReentrantLock(); //用同一个lock对象来获取锁,实现互斥,申请的就是lock的锁
@Override
public void run() { try {
System.out.println("try to wait");
lock.lockInterruptibly();
Thread.sleep(5000);
// this.wait();
System.out.println("after wait");
lock.unlock(); } catch (InterruptedException e) {
System.out.println("recv interrupt");
} }
}

输出:

try to wait
try to wait
try interuppt
recv interrupt
after wait

最新文章

  1. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)
  2. 应用商店后台MIS的一些思考
  3. 4、python列表
  4. struts2漏洞与修复
  5. MVC怎么在当前视图中,传递参数给到另外一个视图?
  6. LightOj 1138 - Trailing Zeroes (III) 阶乘末尾0的个数 & 二分
  7. JavaScript第一部分
  8. [C#] 记-TinyMapper使用
  9. <QtEndian> - Endian Conversion Functions
  10. C ~ 一个串口接收思路
  11. DB天气app冲刺第一天
  12. 当使用VS CODE 时,如果窗口中打开的文件无法识别HTML的话,可以使用以下方法添加要识别的文件类型
  13. Web —— java web 项目开发 笔记
  14. C#实训 打字游戏
  15. form表单多值提交
  16. VFL(Visual Format Language)语言
  17. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
  18. 201521123096《Java程序设计》第九周学习总结
  19. 使用siege对web接口进行post方式的压力测试
  20. C#调用RESTful API

热门文章

  1. python修改列表
  2. go slice与函数传值的理解
  3. 【PCIE-3】---PCIE设备的枚举扫描(经典好文)
  4. 异数OS TCP协议栈测试(二)--短连接篇
  5. 生成URL(而不是链接) Generating URLs (and Not Links) | 在视图中生成输出URL |高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
  6. URL方案最佳做法|高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
  7. Docker在树莓派的安装与使用(Ubuntu Arm Server v19.10)
  8. linux下redis的部署
  9. laravel 事件机制 实践总结
  10. 简述java的ArrayList