Java 多线程----- 解决线程安全问题的 方式三:Lock锁 --------jdk 5.0 新增
1 package bytezero.deadlock;
2
3 import java.util.concurrent.locks.ReentrantLock;
4
5 /**
6 * 解决线程安全问题的方式三:Lock锁 --------jdk 5.0 新增
7 *
8 * 1.面试题:synchronized 与 lock的异同?
9 * 同: 二者都可以解决线程安全问题
10 *
11 * 不同:synchronized 机制在执行完相应的同步代码以后,自动的释放同步监视器
12 * lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())
13 *
14 * 2.如何解决线程安全问题?几种方式
15 * 3种
16 *
17 *
18 * @author Bytezero1·zhenglei! Email:420498246@qq.com
19 * create 2021-10-18 11:03
20 */
21 class Window implements Runnable{
22 private int ticket = 100;
23
24 //1.实例化 ReentrantLock
25 private ReentrantLock lock = new ReentrantLock();
26
27
28 @Override
29 public void run() {
30 while(true){
31 try {
32
33 //调用lock锁定方法
34 lock.lock();
35 if(ticket > 0){
36 try {
37 Thread.sleep(100);
38 } catch (InterruptedException e) {
39 e.printStackTrace();
40 }
41
42 System.out.println(Thread.currentThread().getName() +": 售票,票号为:" +ticket);
43 ticket--;
44 }else{
45 break;
46 }
47 }finally {
48 //3.调用解锁的方法
49 lock.unlock();
50 }
51 }
52 }
53 }
54 public class LockTest {
55 public static void main(String[] args) {
56 Window w1;
57 w1 = new Window();
58
59 Thread t1 = new Thread(w1);
60 Thread t2 = new Thread(w1);
61 Thread t3 = new Thread(w1);
62
63 t1.setName("窗口一");
64 t2.setName("窗口二");
65 t3.setName("窗口三");
66
67 t1.start();
68 t2.start();
69 t3.start();
70
71 }
72 }

................
Java 多线程----- 解决线程安全问题的 方式三:Lock锁 --------jdk 5.0 新增的更多相关文章
- Java之解决线程安全问题的方式三:Lock锁
import java.util.concurrent.locks.ReentrantLock; /** * 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增 * * 1. 面试题:sy ...
- Java多线程之线程同步【synchronized、Lock、volatitle】
线程同步 线程同步:当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多. ...
- java 多线程:线程安全问题synchronized关键字解决
背景: 多个线程同时修改一个变量时,有概率导致两次修改其中某些次被覆盖. 例如:如下案例一个变量值为3,三个线程同时对其-1,如果按顺序执行,每次减完的结果应该是2,1,0.但实际运行中有可能变为0, ...
- 处理java多线程时线程安全问题 - ThreadLocal和Synchronized
多线程在自动化测试中用的不多,也就是说我们用单线程可以完成大部分的自动化测试脚本. 主要有两个原因,首先是因为自动化测试首要考虑的是脚本的稳定性,所以一般会牺牲效率以保证脚本稳定,其次是由于局限于我们 ...
- java如何解决线程安全问题
方式一:同步代码块 synchroized(同步监视器的对象){需要被同步的代码} package threadtest; //使用同步代码块实现Runable接口的线程 public class R ...
- java多线程 -- 创建线程的第三者方式 实现Callable接口
Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个 ...
- java 多线程:线程安全问题,示例DateFormat多线程执行冲突解决方案ThreadLocal、方法内变量
SimpleDateFormat多线程中执行报错 java.lang.NumberFormatException: For input string: "" import ja ...
- java 22 - 12 多线程之解决线程安全问题的实现方式1
从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备, ...
- java 22 - 13 多线程之解决线程安全问题的实现方式2
上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ; Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...
- java线程安全问题以及使用synchronized解决线程安全问题的几种方式
一.线程安全问题 1.产生原因 我们使用java多线程的时候,最让我们头疼的莫过于多线程引起的线程安全问题,那么线程安全问题到底是如何产生的呢?究其本质,是因为多条线程操作同一数据的过程中,破坏了数据 ...
随机推荐
- 用webpack给js添加上版本号
在网上查找了很多的资料. 都没有好的资源 因为我现在在项目是vuecli3.0 需要自己去创建文件 在项目的根目录下,创建一个文件vue.config.js 然后在该文件下写 const webpac ...
- 快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型
相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...
- 6.1 C++ STL 序列映射容器
Map/Multimap 映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入 ...
- 单片机 IAP 技术方案设计
1.前言 关于 IAP 技术,做过 bootloader 的想必很熟悉 (IAP全称 In Application Programming,即应用编程),和 ISP (全称 In System Pro ...
- ListView 判断有没有选中的行方法
ListView1.SelCount 返回选中行的行数 应该是 没有测试 但是测试了 如果没有选中行 返回0 如果选中一行了 返回1
- 同一份代码怎能在不同环境表现不同?记一个可选链因为代码压缩造成的bug
壹 ❀ 引 某一天,CSM日常找我反馈客户紧急工单,说有一个私有部署客户升级版本后,发现一个功能使用不太正常.因为我们公司客户分为两种,一种是SaaS客户,客户侧使用的版本被动跟随主版本变动,而私有部 ...
- NEMU PA 4 实验报告
一.实验目的 在前面的PA123中,我们分别实现了基本的运算单元,实现了各种指令和程序的装载,实现了存储器的层次结构.而在PA4中,为了让NEMU可以处理异常情况以及和外设交互,我们要做的事情有以下: ...
- 【Android】使用Binder实现进程间通讯简单案例
1 前言 使用AIDL实现进程间通讯简单案例 和 使用AIDL实现进程间传递对象案例 中介绍了使用 AIDL 进行进程间通讯,文中提到在编写完 aidl 文件(如:IMessageManager.ai ...
- Java设计模式-状态模式State
介绍 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题.状态和行为是一一对应的,状态之间可以相互转换. 当一个对象的内在状态改变时,允许改变其行 ...
- oracle FGAC(细粒度访问控制)介绍
在ORACLE中,RLS有时也叫做虚拟私有数据库(VPD)或者细粒度访问控制(FGAC). RLS由8i引进,利用这一特性我们可以对表定义安全策略(并且指明对表的操作类型),实现对用户可以看到或者修改 ...