线程同步 Lock 锁

  • 1.Lock 锁
  • 2.步骤
  • 3.Lock 与 synchronized 的区别

1.Lock 锁

Lock 锁:对需要上锁的地方上锁

  • JDK1.5 后新增的功能
  • 与 Synchronized 相比,Lock 可提供多种锁方案,更灵活
  • Java.util.concurrent.locks 中的 Lock 是一个接口,它的实现类是一个 Java 类,而不是作为语言的特性(关键字)来实现
    **注意:**如果同步代码有异常,要将 unLock()放到 finally 中

2.步骤

测试代码:

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class Text{public static void main(String[] args) {CountRunnable cr=new CountRunnable();//代理类的对象Thread t1=new Thread(cr,"A");Thread t2=new Thread(cr,"B");Thread t3=new Thread(cr,"C");t1.start();t2.start();t3.start();}
}
class CountRunnable implements Runnable {private int count=0;//默认值//创建一个Lock对象Lock lock=new ReentrantLock();@Overridepublic void run() {for(int i=0;i<10;i++){try{lock.lock();//加锁count++;try {Thread.sleep(300);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"执行操作:count="+count);}finally{//解锁lock.unlock();}}}
}

运行结果:

3.Lock 与 synchronized 的区别

  • Lock 是 显 示 锁 ( 手 动 开 启 和 关 闭 锁 , 别 忘 关 闭 锁),synchronized 是隐式锁
  • Lock 只有代码块锁,synchronized 有代码块锁和方法锁
  • 使用 Lock 锁,JVM 将花费较少的时间来调度线程,性能更好,并且具有更好的扩展性(提供更多的子类)
  • Lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。lock()方法会对 Lock 实例对象进行加锁,因此所有对该对象调用 lock() 方法的线程都会被阻塞,直到该 Lock 对象的 unlock()方法被调用

Java 多线程和并发编程:(二)线程同步 Lock 锁相关推荐

  1. Java 多线程与并发编程专题

    Java 线程基础 Java 多线程开发 线程安全与同步 并发控制 非阻塞套接字(NIO) Java 5 中的并发 JDK 7 中的 Fork/Join 模式 相关书评 Java 平台提供了一套广泛而 ...

  2. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  3. JAVA并发编程3_线程同步之synchronized关键字

    在上一篇博客里讲解了JAVA的线程的内存模型,见:JAVA并发编程2_线程安全&内存模型,接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题. 不安全线程分析 public clas ...

  4. Java核心(三)并发中的线程同步与锁

    2019独角兽企业重金招聘Python工程师标准>>> 乐观锁.悲观锁.公平锁.自旋锁.偏向锁.轻量级锁.重量级锁.锁膨胀...难理解?不存的!来,话不多说,带你飙车. 上一篇介绍了 ...

  5. 为了在简历上写掌握【Java多线程和并发编程】,做了两万字总结

    文章目录 概述 继承Thread类 实现Runnable接口 实现Callable接口 线程池 线程的五大状态 多线程买票案例 死锁 Lock锁 生产者消费者问题 八锁问题 volatile 写在后面 ...

  6. Java岗:实打实掌握[Java多线程]和[并发编程]

    概述 面试中,多线程和并发编程已经是必不可少的了,我经常看到此类问题,当时也简单了解过,什么继承Thread类,实现Runnable接口,这些都被说烂了,知道这些当然是远远不够的,于是这几天搜索相关资 ...

  7. Java多线程与并发编程终极宝典

    阅读本文需要了解的概念 原语 所谓原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断.在操作系统中,某些被进程调用的操作,如队列操作.对信号量的操作.检查启动外设操作 ...

  8. Java并发编程之线程同步

    线程安全就是防止某个对象或者值在多个线程中被修改而导致的数据不一致问题,因此我们就需要通过同步机制保证在同一时刻只有一个线程能够访问到该对象或数据,修改数据完毕之后,再将最新数据同步到主存中,使得其他 ...

  9. java task和thread_【Java学习笔记-并发编程】线程与任务

    前言 最近在看一些Java15的并发.线程调度以及一些实现方案的东西,虽然很多东西还是 1.5 的,但还是很有收获. 一.线程与任务 Java中,要用线程来执行任务,线程可以说是任务的容器.没有线程的 ...

最新文章

  1. 如何忽略Git中目录中的文件?
  2. 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序
  3. TortoiseSVN每个菜单项都表示什么意思
  4. (7)MySQL的事务
  5. MySQL中order by中关于NULL值的排序问题
  6. C# DataTable 和List之间相互转换的方法
  7. 时间选择插件ClockPicker
  8. CentOS 修改主机名(host)
  9. windows2003在打‘SP2’补丁时提示“拒绝访问”
  10. android studio 继承关系 快捷键,Android Studio快捷键
  11. Android 开发工具类 03_HttpUtils
  12. yaf index.php,yaf框架访问路由为什么始终访问INDEX下的INDEX控制器下的INDEX方法
  13. vs code html插件_VS插件CodeRush全新发布v20.1.7|支持HTML
  14. js调用zk中zul页面表单值
  15. 最小二乘法求解超定方程的原理
  16. 泰晤士2021计算机科学排名,重磅!2021泰晤士学科排名发布!
  17. pentaho安装配置
  18. 基于锚点定位和overflow的选项卡
  19. Matlab中的正态分布概率函数
  20. java面试题:2年工作经验java简历包装,面试为什么公司不通过

热门文章

  1. pcs层到mac层_BaiduPCS Go的安装及使用说明
  2. 魔众文章投稿系统 v1.3.0 菜单快捷搜索 模块市场升级
  3. Docker搭建Kafka集群
  4. 搭建idea激活服务器
  5. python怎么识别字母数字的_python判断字符是否为字母和数字
  6. python新手入门项目推荐_Python新手入门70个练手项目
  7. 不知道联系微众在线客服途径的 赶紧收藏
  8. 什么是MVC设计模式
  9. velocity的使用简介
  10. 聚观早报 | 微念与李子柒达成和解;天才少年稚晖君从华为离职