Java学习之线程安全问题,关于synchronized 和 Lock 的使用

2023-11-05

1.Lock

  • 解决线程安全问题的方式三:Lock锁 JDK5.0新加
  • synchronized 与 Lock的区别:
  • 相同点:
  • 都是解决线程的安全问题
  • 不同点:
  • 1.Lock是显示锁(手动开启和关闭锁),synchronized是隐式锁,出了
  • 作用域自动释放
  • 2.Lock只有代码块锁,synchronized有代码块锁和方法锁
  • 3.Lock锁,JVM将花费较少的时间来调度线程,性能更好.并且具有更好的扩展性,
  • 提供更多的子类
  • 使用优先顺序:
  • LOck>>>同步代码块>>>同步方法
// An highlighted block
var foo = 'bar';
class window implements Runnable {
   
   private int ticket = 100;
   //1.实例化lock
   private ReentrantLock lock = new ReentrantLock(true);//公平锁


   @Override
   public void run() {
   
       while (true) {
   
           //2.在try finally中lock 和 unlock
           try {
   

               lock.lock();

               if (ticket > 0) {
   
//                    try {
   
//                        Thread.sleep(10);
//                    } catch (InterruptedException e) {
   
//                        e.printStackTrace();
//                    }

                   System.out.println(Thread.currentThread().getName() + ":售票,票号为:" + ticket);
                   ticket--;

               } else {
   
                   break;
               }

           }finally {
   
               lock.unlock();
           }

       }
   }
}

public class LockTest {
   

   public static void main(String[] args) {
   
       window w = new window();

       Thread t1 = new Thread(w
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习之线程安全问题,关于synchronized 和 Lock 的使用 的相关文章

随机推荐

  • vue打包到生产环境

    1 进入到项目根目录执行 npm run build 此时会自动打包在dist目录下 2 安装服务 npm install g serve 3 启动 serve dist 以上是生产环境打包的过程 npm run dev 是开发环境 npm
  • JavaWebの知识讲解(JDBC+JSP+Servlet)

    JavaWeb 一 web开发的背景知识 web 顾名思义是网页的意思 如 www baidu com web分为静态web和动态web 1 静态web 纯前端网站即使静态web 只使用html css等前端语言进行编写 静态web提供给所
  • git:在gitignore中设置不忽略的文件(夹)

    说明 用的不算多 但是想用的时候总会忘记 这里插个眼 参考 https blog csdn net CalShell article details 52670175 总结 活用
  • 微信小程序如何调用API实现数据请求-wx.request()

    前言 微信小程序不存在ajax 那么它是如何实现数据请求功能的呢 微在信中提供了API的调用wx request OBJECT 这个是很不错的 下面就讲一下如何请求数据 简单到不行 wx request 看文档时 提供了示例模板如下 wx
  • tcpdump使用详解

    1 tcpdump的语法格式 tcpdump option proto dirction type option 可选参数 proto 协议过滤器 可识别的关键词有 http tcp udp icmp ip ip6 arp rarp typ
  • 算法和数据结构项目练习6-基于Karp‐Rabin 算法的字符串搜索

    Karp Rabin String Search 项目介绍 代码实现 项目介绍 本项目实现了Karp Rabin字符串搜索算法 程序读取的txt文件包含两个字符序列 分别在不同的测试行上 第一行是目标序列T 第二行是搜索序列S 读取这两个字
  • JetBrains IDE Support Chrome插件之各种问题解决

    webstorm前端调试工具 JetBrains IDE Support Chrome插件之各种问题解决 现在网上的那些教程都是很老旧的 我看了大量的资料都没有一个能实现 故我将自己摸索了很久之后找出来的解决办法分享给大家 给大家指明方向
  • Qt5.5.1配置MSVC2010编绎器和windbg调试器

    Qt5 5 1配置MSVC2010编绎器和windbg调试器 windbg下载 windbgDebuggingToolsforWindows C 文档类资源 CSDN下载 1 安装vc 2010 express 2 设置编绎器 32位 64
  • Bean property 'transactionManagerBeanName' is not writable or has an invalid set

    2017 02 07 11 38 48 458 localhost startStop 1 org springframework beans factory support DefaultListableBeanFactory 523 D
  • ChatGPT国内镜像站初体验:聊天、Python代码生成等

    ChatGPT国内镜像站初体验 聊天 Python代码生成 本文获得CSDN质量评分 92 学习的细节是欢悦的历程 Python 官网 https www python org Free 大咖免费 圣经 教程 python 完全自学教程 不
  • 计算模型的GFLOPs和参数量 & 举例VGG16和DETR

    近期忙于写论文 分享一下论文中表格数据的计算方法 目录 一 FLOPS FLOPs和GFLOPs的概念 二 计算VGG16的GFLOPs和参数量 三 计算DETR的GFLOPs和参数量 四 整理数据表格 一 FLOPS FLOPs和GFLO
  • python画填色图时,如何让分层的填色变为渐变色

    python画填色图时 如何让分层的填色变为渐变色 注 自己用来备忘的 以画海洋的地形图为例 数据为一个三维数据 有经度 lon 纬度 lat 高度 z 三个变量 我们绘制的地形图为了美观 只想让colobar显示 100 0之间的高度 我
  • 深入解析java.lang.ClassNotFoundException异常

    1 引言 在Java开发中 我们经常会遇到各种异常 其中 java lang ClassNotFoundException异常是一种常见的异常 本文将深入解析这个异常的定义 作用 产生原因以及常见场景 1 1 介绍ClassNotFound
  • docker elastic search 设置密码,修改密码

    设置密码 1 在docker compose 中添加配置 开启验证功能 在docker compose xml 的 environment 项下添加 xpack security enabled true 2 进入docker 容器 3 随
  • (2)Hibernate实现CRUD

    HibernateUtil package util import org hibernate Session import org hibernate SessionFactory import org hibernate cfg Con
  • Kafka压力测试(官方自带)

    1 Kafka压测 用Kafka官方自带的脚本 对Kafka进行压测 Kafka压测时 可以查看到哪个地方出现了瓶颈 CPU 内存 网络IO 一般都是网络IO达到瓶颈 kafka consumer perf test sh kafka pr
  • Django Orm 查询总结

    Django提供了一套非常方便的类似lingQ的通过对象调用的方式操作数据库表的Orm框架 关于Django Orm的操作方式做下整理 Django Orm 操作主要分为以下几类 增 向表内插入一条数据 删 删除表内数据 物理删除 改 up
  • [leetcode] 1675. 数组的最小偏移量

    题目链接 来源 力扣 LeetCode 链接 https leetcode cn problems minimize deviation in array 著作权归领扣网络所有 商业转载请联系官方授权 非商业转载请注明出处 示例 1 输入
  • AMR 文件解析及编解码流程

    CONTENT AMR简介 AMR 话音质量评定 AMR 文件结构解析 AMR 帧结构解析 AMR 帧读取算法 AMR 解码原理及流程 AMR 模式选择自适应机制 一 AMR 简介 基于新的网络和新的要求 无论是从节省传输频带资源 还是保持
  • Java学习之线程安全问题,关于synchronized 和 Lock 的使用

    1 Lock 解决线程安全问题的方式三 Lock锁 JDK5 0新加 synchronized 与 Lock的区别 相同点 都是解决线程的安全问题 不同点 1 Lock是显示锁 手动开启和关闭锁 synchronized是隐式锁 出了 作用