【JAVA】线程安全的案例
1.什么是线程安全?
当多个线程共享同一个全局变量,做写的操作的时候,可能会受到其他线程的干扰,导致数据有问题,这种现象叫做线程安全问题。
2.案例
模拟火车票卖票程序,火车车厢一般都有118个座,这里新建一个火车票类,一个方法卖票。再建一个测试类
package lock;public class Ticket { public int count = 118; public int sell() { System.out.println(Thread.currentThread().getName() + ":还剩下" + count + "张票"); return --count; }}
package lock;public class SellerSystem { public static void main(String[] args) { Ticket ticket = new Ticket(); new Thread(new Runnable() { @Override public void run() { while (ticket.sell() > 0) { } } }).start(); new Thread(new Runnable() { @Override public void run() { while (ticket.sell() > 0) { } } }).start(); }}
3.为了保证线程安全问题
第一种方法加synchronized关键字
public synchronized int sell() { System.out.println(Thread.currentThread().getName() + ":还剩下" + count + "张票"); return --count;}
第二种方法,使用锁
public int sell() { lock.lock(); System.out.println(Thread.currentThread().getName() + ":还剩下" + count + "张票"); count--; lock.unlock(); return count;}
转载于:https://www.cnblogs.com/jianpanaq/p/10264069.html
【JAVA】线程安全的案例相关推荐
- Java线程安全的案例及实现
笔记 线程安全问题:多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题 例如下面这段代码 public class Account {private String id;pr ...
- java线程死锁_Java线程死锁–案例研究
java线程死锁 本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析. 此案例研究还将证明掌握线程转储分析技能的重要性: 包括 ...
- Java线程死锁–案例研究
本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析. 此案例研究还将证明掌握线程转储分析技能的重要性: 包括用于IBM JVM ...
- java线程池案例_使用Executors 和 ThreadPoolExecutor实现Java线程池案例
并发主题 使用Executors 和 ThreadPoolExecutor实现Java线程池案例 首先需要一个工作线程: package com.journaldev.threadpool; publ ...
- Java线程池源码解析及高质量代码案例
引言 本文为Java高级编程中的一些知识总结,其中第一章对Jdk 1.7.0_25中的多线程架构中的线程池ThreadPoolExecutor源码进行架构原理介绍以及源码解析.第二章则分析了几个违反J ...
- Java线程同步学习,线程不安全案例讲解,同步方法和同步块 synchronized
本文主要是自己学习多线程时,所做的笔记,参考的是b站狂神说Java多线程视频讲解. 目录如下: 文章目录 线程同步 一.三大线程不安全案例 1.买票案例 2.不安全取钱 3.线程不安全 二.同步方法及 ...
- Java多线程:线程8锁案例分析
线程8锁案例分析 通过分析代码,推测打印结果,并运行代码进行验证 1.两个线程调用同一个对象的两个同步方法 被synchronized修饰的方法,锁的对象是方法的调用者.因为两个方法的调用者是同一个, ...
- Java线程池实现原理及其在美团业务中的实践
来自:美团技术团队 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池ThreadPoolExecuto ...
- java线程主要状态及转换_Java线程状态转换及控制
线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...
- java线程切换 notify_浅谈 Java线程状态转换及控制
作者:城北有个混子 出自:博客园 1.线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞( ...
最新文章
- iOS:极光推送控制器跳转
- LeetCode Shell 194. 转置文件
- 编译性语言、解释性语言和脚本语言的区别
- 如果Java快死了,那么它肯定看起来非常健康
- python基本语法:序列
- python在工厂中的运用_在python中使用元类实现工厂设计模式
- [导入]网页色彩搭配技巧
- Swift中文教程(十九) 类型嵌套
- 小说的逻辑与反逻辑_以理性的数学逻辑构筑推理小说
- Python+pandas使用重采样技术按时间段查看员工业绩
- 经典Java入门视频教程免费下载
- python百度关键词相关搜索采集,链轮查询采集相关关键词工具exe
- Error: spawn xxxx ENOENT原因与解决
- es文件无法找到局域网服务器,手机ES文件管理器局域网连接电脑WIN10,访问电脑文件...
- 一文教你如何挑选深度学习GPU
- 复杂网络 社交网络_社交网络:不是主流
- 赵小楼《天道》《遥远的救世主》深度解析(57)“此生得你红颜知己足矣”丁元英和芮小丹终于在一起
- JSON Parse error:Unrecognized token xxx
- edius制作视频音画不同步原因
- 互换性与技术测量知识点