当前位置: 首页 > news >正文

Java多线程锁定

前言

利用多线程编程虽然能极大地提升运行效率,但是多线程本身的不稳定也会带来一系列的问题,其中最经典莫过于售票问题;这时就需要人为地加以限制和干涉已解决问题,譬如今日之主题——锁定。

锁定是我们在多线程中用来解决售票问题的工具,它的作用机制是将业务代码上锁;锁定后的区间同一时间只能允许一个线程进入运行,在该线程运行结束之前,其余线程均不得进入,只能在区间外等待。

实现

锁的实现在Java中有三种实现方式,以下将逐一展示。

方法一

利用Java提供的lock锁进行锁定

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class MyThread extends Thread {private static int num = 1;private static Lock lock = new ReentrantLock();public MyThread(String s) {this.setName(s);}public void run() {while(true) {lock.lock();if(num < 31) {System.out.println(this.getName() + "售出第" + num + "张票");num++;}lock.unlock();}}
}

方法二

利用syncronized方法进行锁定。

class MyThread extends Thread {private static int num = 1;public MyThread(String s) {this.setName(s);}public void run() {while(true) {synchronized(MyThread.class) {if(num < 31) {System.out.println(this.getName() + "售出第" + num + "张票");num++;}}}}
}

注意

synchronized方法需要一个公共对象作为“锁头”。

方法三

同步方法实现

class MyThread extends Thread {private static int num = 1;public MyThread(String s) {this.setName(s);}public void run() {while(true) {if(methood())	break;}}private synchronized boolean methood() {if(num  > 30)	return true;System.out.println(this.getName() + "售出第" + num + "张票");num++;return false;}
}

http://www.lryc.cn/news/340497.html

相关文章:

  • 【C 数据结构】单链表
  • [MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目
  • Spring Boot | Spring Boot 整合 “Servlet三大组件“ ( Servlet / Filter / Listene )
  • 错误分析 (Machine Learning研习十九)
  • SQL系统函数知识点梳理(Oracle)
  • 面试突击---MySQL索引
  • 关注 | 我国已对百种产品实施强制性产品认证
  • 虚幻引擎架构自动化及蓝图编辑器高级开发进修班
  • Weakly Supervised Audio-Visual Violence Detection 论文阅读
  • 华为海思数字芯片设计笔试第六套
  • 重绘和重排:概念、区别和应用示例
  • 创建k8s deploy yaml文件的imagePullSecrets语句
  • 大模型预测结果导入到Doccano,人工修正预测不准的数据
  • python三方库_ciscoconfparse学习笔记
  • HDFS详解(Hadoop)
  • python创建word文档并向word中写数据
  • MongoDB的安装配置及使用
  • Go学习路线
  • 安全大脑与盲人摸象
  • 如何使用Git-Secrets防止将敏感信息意外上传至Git库
  • Day 14 网络协议
  • msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)
  • 实验六 智能手机互联网程序设计(微信程序方向)实验报告
  • Linux环境下,让Jar项目多线程部署成为可能
  • k8s调度场景
  • 基于小程序实现的餐饮外卖系统
  • 家居网购项目(手写分页)
  • goland2024安装包(亲测可用)
  • 35、链表-LRU缓存
  • 数据结构速成--栈