6、JUC--同步锁Lock
显示锁 Lock
在Java 5.0之前,协调共享对象的访问时可以使用的机
制只有 synchronized 和 volatile 。Java 5.0 后增加了一些
新的机制,但并不是一种替代内置锁的方法,而是当内
置锁不适用时,作为一种可选择的高级功能。
ReentrantLock 实现了 Lock 接口,并提供了与
synchronized 相同的互斥性和内存可见性。但相较于
synchronized 提供了更高的处理锁的灵活性
解决多线程安全的方法:
1、同部代码块(synchronized )隐式
2、同部方法(synchronized )隐式
3、同步锁(Lock)显示
注意:需要通过过lock()方法上锁
必须通过unlock()方法进行释放锁
实例:
卖票问题
public class TestLock {public static void main(String[] args) {Ticket t = new Ticket();new Thread(t,"1窗口").start();new Thread(t,"2窗口").start();new Thread(t,"3窗口").start();}} class Ticket implements Runnable{private int ticket = 100;@Overridepublic void run() {while(true){if(ticket >0){try {Thread.sleep(400);} catch (InterruptedException e) {// TODO Auto-generated catch block e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "进行卖票,剩余:" + --ticket);}}} }
此时的线程是不安全的
对代码尽心修改:
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class TestLock {public static void main(String[] args) {Ticket t = new Ticket();new Thread(t,"1窗口").start();new Thread(t,"2窗口").start();new Thread(t,"3窗口").start();} } class Ticket implements Runnable{private int ticket = 100;private Lock lock = new ReentrantLock();@Overridepublic void run() {while(true){//上锁lock.lock();try {if(ticket >0){ try {Thread.sleep(400);} catch (InterruptedException e) {// TODO Auto-generated catch block e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "进行卖票,剩余:" + --ticket);}} finally {//释放锁lock.unlock();}}} }
此时可以有效的解决多线成的安全性问题
转载于:https://www.cnblogs.com/Mrchengs/p/10793730.html
6、JUC--同步锁Lock相关推荐
- 同步锁Lock的使用
2019独角兽企业重金招聘Python工程师标准>>> //数据同步锁保证数据的同步操作 private static Lock lock=new ReentrantLock(); ...
- java 同步方式 lock_Java的同步锁(Lock)
从Java 5开始,Java提供了一种功能更强大的线程同步机制一-通过 显式定义同步锁对象来实现同步,在这种机制下,同步锁由Lock对象充当.Lock提供了比synchronized方法和synchr ...
- Java同步锁——lock与synchronized 的区别【转】
在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一.Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchroni ...
- 【并发】线程同步——锁Lock与synchronized比较
一.简单使用Lock锁 Java 5中引入了新的锁机制--java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lo ...
- 开线程插数据_python笔记7-多线程之线程同步(锁lock)
前言丨 关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景: 吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸. 为了避免这种情况,在下鱼 ...
- Python之进程+线程+协程(并发与并行、GIL锁、同步锁、死锁、递归锁)
文章目录 一.并发与并行 二.同步与异步 三.线程锁 1.GIL全局解释器锁 2.同步锁 3.死锁 4.递归锁 在Python中GIL解释器锁.同步锁.死锁.递归锁都是什么?怎么这么多锁,它们都是用来 ...
- JUC的那些同步锁们
JUC的那些同步锁们 Reentranlock ReadWriteLock CountDownLatch CyclicBarrier Semaphore Exchanger LockSupport R ...
- java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...
- educoder 使用线程锁(lock)实现线程同步_性能:Lock的锁之优化
Lock / synchronized Lock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁 synchronizedLock实现方式JVM层实现Java底层代码实 ...
- java同步锁实例_Java lock同步锁使用实例解析
这篇文章主要介绍了Java lock同步锁使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1)Lock是一个接口,而synchroniz ...
最新文章
- 【Python】随机函数
- python游戏脚本实例-基于Python实现的扫雷游戏实例代码
- 解决Windows7 Embedded连接手机问题
- js实现元素水平垂直居中
- 如何设置JTable行颜色
- 设计模式六大原则(3)——依赖倒置原则
- mysql时长用什么类型_MySQL 日期时间类型怎么选?千万不要乱用!
- 【OJ二分06】月度开销
- sudo: unable to resolve host iZ2zecsdy8flu603bmdg1bZ
- kotlin null_Kotlin Null安全– Kotlin可空
- 回复失恋男的来信(转)
- 【移入移出事件练习】【菜单】【选项卡】 -------this使用
- 利用网络月赚10000元揭密
- chrome下载文件竟然都有缓存!
- meta的http-equiv属性
- centos6 yum安装nginx
- 网络运维与安全岗位月薪2.5w,您还不知道的前景!
- 安装Sql Server:以前的某个安装需要重新引导计算机以便使其更改生效。若要继续,请重启计算机,然后再次运行安装程序。
- spoolsv病毒的清除
- 负记账与剩余项目清账虚增借贷的问题
热门文章
- Windows Store获得Fluent Design加成
- websocket小荔枝
- [linux内核]將ubuntu更新到最新的内核
- 佛弟子有三样东西需要永远保密!
- 基于策略的路由(下)
- JDBC--Statement,PreparedStatement,CallableStatement的区别
- SSL连接并非完全问题解决
- python3精简笔记——开篇
- 天猫全球狂欢夜,我竟然被这个“不是人”的家伙给圈了粉!
- Bzoj 1046: [HAOI2007]上升序列 二分,递推