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】线程安全的案例相关推荐

  1. Java线程安全的案例及实现

    笔记 线程安全问题:多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题 例如下面这段代码 public class Account {private String id;pr ...

  2. java线程死锁_Java线程死锁–案例研究

    java线程死锁 本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析. 此案例研究还将证明掌握线程转储分析技能的重要性: 包括 ...

  3. Java线程死锁–案例研究

    本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析. 此案例研究还将证明掌握线程转储分析技能的重要性: 包括用于IBM JVM ...

  4. java线程池案例_使用Executors 和 ThreadPoolExecutor实现Java线程池案例

    并发主题 使用Executors 和 ThreadPoolExecutor实现Java线程池案例 首先需要一个工作线程: package com.journaldev.threadpool; publ ...

  5. Java线程池源码解析及高质量代码案例

    引言 本文为Java高级编程中的一些知识总结,其中第一章对Jdk 1.7.0_25中的多线程架构中的线程池ThreadPoolExecutor源码进行架构原理介绍以及源码解析.第二章则分析了几个违反J ...

  6. Java线程同步学习,线程不安全案例讲解,同步方法和同步块 synchronized

    本文主要是自己学习多线程时,所做的笔记,参考的是b站狂神说Java多线程视频讲解. 目录如下: 文章目录 线程同步 一.三大线程不安全案例 1.买票案例 2.不安全取钱 3.线程不安全 二.同步方法及 ...

  7. Java多线程:线程8锁案例分析

    线程8锁案例分析 通过分析代码,推测打印结果,并运行代码进行验证 1.两个线程调用同一个对象的两个同步方法 被synchronized修饰的方法,锁的对象是方法的调用者.因为两个方法的调用者是同一个, ...

  8. Java线程池实现原理及其在美团业务中的实践

    来自:美团技术团队 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池ThreadPoolExecuto ...

  9. java线程主要状态及转换_Java线程状态转换及控制

    线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...

  10. java线程切换 notify_浅谈 Java线程状态转换及控制

    作者:城北有个混子 出自:博客园 1.线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞( ...

最新文章

  1. iOS:极光推送控制器跳转
  2. LeetCode Shell 194. 转置文件
  3. 编译性语言、解释性语言和脚本语言的区别
  4. 如果Java快死了,那么它肯定看起来非常健康
  5. python基本语法:序列
  6. python在工厂中的运用_在python中使用元类实现工厂设计模式
  7. [导入]网页色彩搭配技巧
  8. Swift中文教程(十九) 类型嵌套
  9. 小说的逻辑与反逻辑_以理性的数学逻辑构筑推理小说
  10. Python+pandas使用重采样技术按时间段查看员工业绩
  11. 经典Java入门视频教程免费下载
  12. python百度关键词相关搜索采集,链轮查询采集相关关键词工具exe
  13. Error: spawn xxxx ENOENT原因与解决
  14. es文件无法找到局域网服务器,手机ES文件管理器局域网连接电脑WIN10,访问电脑文件...
  15. 一文教你如何挑选深度学习GPU
  16. 复杂网络 社交网络_社交网络:不是主流
  17. 赵小楼《天道》《遥远的救世主》深度解析(57)“此生得你红颜知己足矣”丁元英和芮小丹终于在一起
  18. JSON Parse error:Unrecognized token xxx
  19. edius制作视频音画不同步原因
  20. 互换性与技术测量知识点

热门文章

  1. 拓端tecdat|R 语言绘制功能富集泡泡图
  2. jQuery学习笔记03
  3. python 读取远程服务器文件
  4. 绘制神经网络工具汇总(重要)
  5. Caffe学习:Loss
  6. python金融股票市场数据分析神器TA-Lib学习使用
  7. 神经网络常用激活函数总结
  8. 2021-08-13servlet 原理及注意事项
  9. C++ for (auto it:myset) 是什么意思 引用
  10. latex 图片缩小指定比例