显示锁 Lock

 在Java 5.0之前,协调共享对象的访问时可以使用的机
  制只有 synchronizedvolatile 。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相关推荐

  1. 同步锁Lock的使用

    2019独角兽企业重金招聘Python工程师标准>>> //数据同步锁保证数据的同步操作  private static Lock lock=new ReentrantLock(); ...

  2. java 同步方式 lock_Java的同步锁(Lock)

    从Java 5开始,Java提供了一种功能更强大的线程同步机制一-通过 显式定义同步锁对象来实现同步,在这种机制下,同步锁由Lock对象充当.Lock提供了比synchronized方法和synchr ...

  3. Java同步锁——lock与synchronized 的区别【转】

    在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一.Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchroni ...

  4. 【并发】线程同步——锁Lock与synchronized比较

    一.简单使用Lock锁 Java 5中引入了新的锁机制--java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lo ...

  5. 开线程插数据_python笔记7-多线程之线程同步(锁lock)

    前言丨 关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景: 吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸. 为了避免这种情况,在下鱼 ...

  6. Python之进程+线程+协程(并发与并行、GIL锁、同步锁、死锁、递归锁)

    文章目录 一.并发与并行 二.同步与异步 三.线程锁 1.GIL全局解释器锁 2.同步锁 3.死锁 4.递归锁 在Python中GIL解释器锁.同步锁.死锁.递归锁都是什么?怎么这么多锁,它们都是用来 ...

  7. JUC的那些同步锁们

    JUC的那些同步锁们 Reentranlock ReadWriteLock CountDownLatch CyclicBarrier Semaphore Exchanger LockSupport R ...

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

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

  9. educoder 使用线程锁(lock)实现线程同步_性能:Lock的锁之优化

    Lock / synchronized Lock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁 synchronizedLock实现方式JVM层实现Java底层代码实 ...

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

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

最新文章

  1. 【Python】随机函数
  2. python游戏脚本实例-基于Python实现的扫雷游戏实例代码
  3. 解决Windows7 Embedded连接手机问题
  4. js实现元素水平垂直居中
  5. 如何设置JTable行颜色
  6. 设计模式六大原则(3)——依赖倒置原则
  7. mysql时长用什么类型_MySQL 日期时间类型怎么选?千万不要乱用!
  8. 【OJ二分06】月度开销
  9. sudo: unable to resolve host iZ2zecsdy8flu603bmdg1bZ
  10. kotlin null_Kotlin Null安全– Kotlin可空
  11. 回复失恋男的来信(转)
  12. 【移入移出事件练习】【菜单】【选项卡】 -------this使用
  13. 利用网络月赚10000元揭密
  14. chrome下载文件竟然都有缓存!
  15. meta的http-equiv属性
  16. centos6 yum安装nginx
  17. 网络运维与安全岗位月薪2.5w,您还不知道的前景!
  18. 安装Sql Server:以前的某个安装需要重新引导计算机以便使其更改生效。若要继续,请重启计算机,然后再次运行安装程序。
  19. spoolsv病毒的清除
  20. 负记账与剩余项目清账虚增借贷的问题

热门文章

  1. Windows Store获得Fluent Design加成
  2. websocket小荔枝
  3. [linux内核]將ubuntu更新到最新的内核
  4. 佛弟子有三样东西需要永远保密!
  5. 基于策略的路由(下)
  6. JDBC--Statement,PreparedStatement,CallableStatement的区别
  7. SSL连接并非完全问题解决
  8. python3精简笔记——开篇
  9. 天猫全球狂欢夜,我竟然被这个“不是人”的家伙给圈了粉!
  10. Bzoj 1046: [HAOI2007]上升序列 二分,递推