在不考虑多线程的情况下,很多类代码都是完全正确的,但是如果放在多线程环境下,这些代码就很容易出错,我们称这些类为 线程不安全类 。多线程环境下使用线程安全类 才是安全的。

下面是一个线程不安全类的例子:
public class Account {
     private Integer balance;
     public Account(Integer balance) {
           super();
           this. balance = balance;
     }
     public Integer getBalance() {
           return balance;
     }
     public void setBalance(Integer balance) {
           this. balance = balance;
     }
     
     public void draw(Integer drawAccount){
           if( balance>= drawAccount){
               System. out.println(Thread. currentThread().getName()+"取钱成功,吐出钞票:" +drawAccount );
               balance-= drawAccount;
              System. out.println( "余额为:"+balance );
          } else{
              System. out.println( Thread. currentThread().getName()+"余额不足,取钱失败!" );
          }
     }
}
public class DrawThread extends Thread{
     private Account account;
     private Integer drawAccount;
     public DrawThread(String name,Account account, Integer drawAccount) {
           super( name);
           this. account = account;
           this. drawAccount = drawAccount;
     }
     //当多条线程共享一个数据的时候,会涉及到线程安全问题
     public void run(){
           account.draw( drawAccount);
     }
}
public class Main{
     public static void main(String[] args) {
          Account account = new Account(1000);
           //模拟两条线程对于同一个账户取钱
           new DrawThread( "甲", account, 800).start();;
           new DrawThread( "乙", account, 800).start();;
     }
}
运行结果:
很明显线程同步时发生了问题,线程不安全。
那么如何解决呢?下一节讲。

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/ZhangJinkun/p/4531692.html

多线程环境下的线程不安全问题(1)相关推荐

  1. Java多线程之单例模式在多线程环境下的安全问题

    Java多线程之单例模式在多线程环境下的安全问题 目录: 单例模式基本概念 单线程下的单例模式 多线程下的单例模式 单例模式volatile分析 1. 单例模式基本概念 基本概念转载自:单例模式|菜鸟 ...

  2. 多线程环境下,程序真是危机四伏

    姿势在不断的更新迭代, 太卷了. 你管这也叫线程安全? 最近大意了,竟然想将<面试官:实现一个带值变更通知能力的Dictionary>一文中的临界锁只应用到写操作. 内心旁白:读操作又不会 ...

  3. 单例模式的5种实现方式,以及在多线程环境下5种创建单例模式的效率

    这段时间从头温习设计模式.记载下来,以便自己复习,也分享给大家. [java] view plaincopy package com.iter.devbox.singleton; /** * 饿汉式 ...

  4. flask keras 多线程环境下加载模型

    keras 多线程环境下加载模型 Tensor Tensor is not an element of this graph. 问题场景 keras 使用flask 发布深度学习模型服务,模型有一个定 ...

  5. 多线程环境下HashMap导致CPU100%

    引言 昨天早上线上系统开始作业了一段时间以后,突然收到服务器报警,服务器CPU持续占用100%,导致线上系统不能正常使用,我登录服务器top了一下,发现java进程占用cpu400%, 由于前天晚上上 ...

  6. HttpClient在多线程环境下踩坑总结

    HttpClient在多线程环境下踩坑总结 问题现场 在多线程环境下使用HttpClient组件对某个HTTP服务发起请求,运行一段时间之后发现客户端主机CPU利用率呈现出下降趋势,而不是一个稳定的状 ...

  7. 5招教你实现多线程场景下的线程安全!

    摘要:多线程(并发)场景下,如何编写线程安全(Thread-Safety)的程序,对于程序的正确和稳定运行有重要的意义.下面将结合示例,谈谈如何在Java语言中,实现线程安全的程序. 本文分享自华为云 ...

  8. 如何只用5招实现多线程场景下的线程安全?

    前言 1.引言 当前随着计算机硬件的快速发展,个人电脑上的 CPU 也是多核的,现在普遍的 CUP 核数都是 4 核或者 8 核的.因此,在编写程序时,需要为了提高效率,充分发挥硬件的能力,则需要编写 ...

  9. 技术精讲丨多线程环境下时间轮-海量定时任务的定时器设计

    多线程环境下海量定时任务处理-定时器设计 1.  定时器设计 2.  红黑树.最小堆以及跳表的实现对比 3.  时间轮的实现 视频讲解如下,点击观看: 技术精讲丨多线程环境下时间轮-海量定时任务的定时 ...

最新文章

  1. Google Colab 免费GPU服务器使用教程 挂载云端硬盘
  2. flask框架如何实现修改密码和免密登录功能
  3. Spark之数据倾斜 --采样分而治之解决方案
  4. python调用其他程序或脚本方法(转)
  5. 用new和delete运算符进行动态分配和撤销存储空间
  6. PostgreSQL hstore 列性能提升一例
  7. m1芯片macbook安装torch环境(采用conda-forge)
  8. Android WiFi 经常掉线出现的几个原因分析!
  9. python质量转换程序,Python库的文件转换成MP3和设置它们的质量
  10. android MemeoryFile和Parcel操作文件描述符fd
  11. Python单下划线与双下划线
  12. Linux命令之iconv命令
  13. 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
  14. 无法识别 移动固态硬盘_固态硬盘不识别怎么办 固态硬盘不认盘解决方法介绍...
  15. 三十四、Expandable grid 可扩展的表格
  16. ps怎么更改背景图层大小_PS怎么修改图片尺寸大小?ps修改图片大小方法图解
  17. Linux文件打包与压缩
  18. 流量分析和强制执行ntopng
  19. The requested URL returned error: 403
  20. SDRAM的工作原理

热门文章

  1. 导出oracle sequences,CSS_oracle导出序列方法分析,方法一:SELECT ' CREATE SEQUEN - phpStudy...
  2. JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
  3. mysql数据库用hs_MySQL数据库安装步骤
  4. mysql 没有mysql库_MySQL安装之后没有MySQL数据库的原因
  5. linux 指定库名 登录mysql_Linux下指定mysql数据库数据配置主主同步的实例
  6. 程序异常是python语言基本控制结构_计算机二级python 知识点篇(程序的控制结构)...
  7. 骑士 java_在递归骑士之旅中正确声明变量(Java作业)
  8. bootstraptable合并标题_Bootstrap-table 单元格合并 、表头合并
  9. 2019年python就业前景_2019年Python数据挖掘就业前景前瞻
  10. Git复习(八)之快速理解Git结构