java:lock锁
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锁相关推荐
- [Java] Lock(锁)的tryLock失败是否需要unlock?
- java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...
- java lock 效率_工作常用4种Java线程锁的特点,性能比较、使用场景
多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...
- java lock 对象_Java并发编程锁系列之ReentrantLock对象总结
Java并发编程锁系列之ReentrantLock对象总结 在Java并发编程中,根据不同维度来区分锁的话,锁可以分为十五种.ReentranckLock就是其中的多个分类. 本文主要内容:重入锁理解 ...
- java同步锁实例_Java lock同步锁使用实例解析
这篇文章主要介绍了Java lock同步锁使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1)Lock是一个接口,而synchroniz ...
- java 多线程 串行 加锁_java多线程 synchronized 与lock锁 实现线程安全
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 通过卖火车票的例子 火车站要卖票,我们 ...
- java多线程安全解决方案_java常用知识:多线程安全问题的解决方法-Lock锁
jdk1.5后出现的 两个方法: void Lock() void unlock() 使用步骤: 1.在成员位置创建一个ReentrantLock对象 2.在可能出现安全问题的代码前调用Lock接口中 ...
- java 代码锁_Java中的Lock锁
Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...
- java并发,同步synchronize和lock锁的使用方法和注意,死锁案例分析
1.什么是线程安全问题 多个线程同时共享同一个全局变量或者静态变量的时候,某个线程的写操作,可能会影响到其他线程操作这个变量.所有线程读一个变量不会产生线程安全问题. 实际场景就是火车站买票问题:剩余 ...
最新文章
- C++的iostream标准库介绍+使用详解(转)
- 纪念品分组(洛谷-P1094)
- 混合精度训练amp,torch.cuda.amp.autocast():
- 如何优化WebAPP性能:从五个层面上彻底优化前端项目性能
- winform中鼠标放上去显示气泡提示信息
- 记一次高io wait问题分析及解决-设置合理的SGA
- React Native vs. Cordova.
- Eclipse常用插件下载
- html5hr标签默认值,hr_标签 | Elements_HTML_参考手册_非常教程
- 2021前端智能化发展现状与未来展望
- 神经元细胞结构刨析(持续更新)
- Hibernate【映射】续篇
- React-Native 知识点小结
- html设置返回首页,html页面添加返回顶部按钮
- jasypt数据源加密
- 前端开发面试问题及答案
- 量化交易学习笔记(13) 交易数据获取(优化版本)
- Leetcode-545. Boundary of Binary Tree
- 定了,皮皮APP助力电子竞技游戏师职业技能标准发布
- Java开发——JDK环境配置
热门文章
- Xilinx ISE 14.7 安装教程
- BlueMind 3.0.17 发布,消息和协作平台
- 如何在服务器端写关闭窗口的代码?同时能够更新父窗口?
- 如何让SVN提交时候强制添加注释
- 【BUG】小米5中 video.js 在钉钉 webview 中全屏后 后退无法弹出虚拟键盘
- sqlmap工具命令行的含义
- Java 反射将配置文件数据加载到对象属性中
- Java 文件上传下载管理器(控制台)
- asp正则替换链接实现伪静态效果
- js中document.getElementById(ID)与document.getElementsByName(Name)的区别