synchronized锁效率比较低,不方便扩展,不能自定义。于是从jdk1.5之后,就引入了lock锁。

lock可以手动上锁,手动释放锁,灵活性很高。

        Lock lock = new ReentrantLock();lock.lock(); try{// 可能会出现线程安全的操作}finally{// 一定要在finally中释放锁lock.unlock();}

lock锁例子

package com.baobaotao;import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class Printer{// 打印机public String fileName;public String fileType;boolean flag = true;Lock lock = new ReentrantLock();
}class Out extends Thread{Printer print;Condition newCon;public Out(Printer print, Condition newCon){this.print = print;this.newCon = newCon;}@Overridepublic void run() {int count = 0;while(true){try{print.lock.lock();if(!print.flag){newCon.await(); }if(count == 0){print.fileName = "三国演义";print.fileType = "pdf";}else{print.fileName = "红楼梦";print.fileType = "txt";}count = (count + 1)%2;print.flag = false;// 唤醒其他线程newCon.signal();}catch(Exception e){e.printStackTrace();}finally{System.out.println("Out--finally--unlock--");print.lock.unlock();}}}
}class Input extends Thread{Printer print;Condition newCon;public Input(Printer print, Condition newCon){this.print = print;this.newCon = newCon;}@Overridepublic void run() {while(true){try{print.lock.lock();if(print.flag){newCon.await(); }System.out.println(print.fileName+", "+print.fileType);print.flag = true;newCon.signal();}catch(Exception e){e.printStackTrace();}finally{System.out.println("Input--finally--unlock--");print.lock.unlock();}}}
}public class OutInputThread extends Thread{public static void main(String[] args){Printer print = new Printer();Condition newCon = print.lock.newCondition();Out out = new Out(print, newCon);Input input = new Input(print, newCon);out.start();input.start();}
}

java:lock锁相关推荐

  1. [Java] Lock(锁)的tryLock失败是否需要unlock?

  2. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  3. java lock 效率_工作常用4种Java线程锁的特点,性能比较、使用场景

    多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...

  4. java lock 对象_Java并发编程锁系列之ReentrantLock对象总结

    Java并发编程锁系列之ReentrantLock对象总结 在Java并发编程中,根据不同维度来区分锁的话,锁可以分为十五种.ReentranckLock就是其中的多个分类. 本文主要内容:重入锁理解 ...

  5. java同步锁实例_Java lock同步锁使用实例解析

    这篇文章主要介绍了Java lock同步锁使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1)Lock是一个接口,而synchroniz ...

  6. java 多线程 串行 加锁_java多线程 synchronized 与lock锁 实现线程安全

    如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 通过卖火车票的例子 火车站要卖票,我们 ...

  7. java多线程安全解决方案_java常用知识:多线程安全问题的解决方法-Lock锁

    jdk1.5后出现的 两个方法: void Lock() void unlock() 使用步骤: 1.在成员位置创建一个ReentrantLock对象 2.在可能出现安全问题的代码前调用Lock接口中 ...

  8. java 代码锁_Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

  9. java并发,同步synchronize和lock锁的使用方法和注意,死锁案例分析

    1.什么是线程安全问题 多个线程同时共享同一个全局变量或者静态变量的时候,某个线程的写操作,可能会影响到其他线程操作这个变量.所有线程读一个变量不会产生线程安全问题. 实际场景就是火车站买票问题:剩余 ...

最新文章

  1. C++的iostream标准库介绍+使用详解(转)
  2. 纪念品分组(洛谷-P1094)
  3. 混合精度训练amp,torch.cuda.amp.autocast():
  4. 如何优化WebAPP性能:从五个层面上彻底优化前端项目性能
  5. winform中鼠标放上去显示气泡提示信息
  6. 记一次高io wait问题分析及解决-设置合理的SGA
  7. React Native vs. Cordova.
  8. Eclipse常用插件下载
  9. html5hr标签默认值,hr_标签 | Elements_HTML_参考手册_非常教程
  10. 2021前端智能化发展现状与未来展望
  11. 神经元细胞结构刨析(持续更新)
  12. Hibernate【映射】续篇
  13. React-Native 知识点小结
  14. html设置返回首页,html页面添加返回顶部按钮
  15. jasypt数据源加密
  16. 前端开发面试问题及答案
  17. 量化交易学习笔记(13) 交易数据获取(优化版本)
  18. Leetcode-545. Boundary of Binary Tree
  19. 定了,皮皮APP助力电子竞技游戏师职业技能标准发布
  20. Java开发——JDK环境配置

热门文章

  1. Xilinx ISE 14.7 安装教程
  2. BlueMind 3.0.17 发布,消息和协作平台
  3. 如何在服务器端写关闭窗口的代码?同时能够更新父窗口?
  4. 如何让SVN提交时候强制添加注释
  5. 【BUG】小米5中 video.js 在钉钉 webview 中全屏后 后退无法弹出虚拟键盘
  6. sqlmap工具命令行的含义
  7. Java 反射将配置文件数据加载到对象属性中
  8. Java 文件上传下载管理器(控制台)
  9. asp正则替换链接实现伪静态效果
  10. js中document.getElementById(ID)与document.getElementsByName(Name)的区别