java多线程学习之线程安全问题
2017-05-25 11:55
585 查看
商品类
package learn.thread; public class Commodity { public static int cNum = 5; // 购买并返回剩余数 public static int buyCommodity() { cNum -= 1; return getcNum(); } public static int getcNum() { return cNum; } synchronized public static int buyCommodity2() { cNum -= 1; return getcNum(); } synchronized public static int getcNum2() { return cNum; } }
package learn.thread; /* * 线程访问变量在没锁情况下会有线程安全问题 */ public class Demo3 extends Thread { public Demo3(String name) { super(name); } // 线程共享数据 String name; @Override public void run() { int temp = Commodity.buyCommodity(); System.out.println(this.getName() + " 商品剩余数: " + temp); } public static void main(String[] args) { Demo3 t1 = new Demo3("A"); Demo3 t2 = new Demo3("B"); Demo3 t3 = new Demo3("C"); Demo3 t4 = new Demo3("D"); Demo3 t5 = new Demo3("E"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); try { // 执行完后查看剩余数 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(" 商品剩余数: " + Commodity.getcNum()); } } // A 商品剩余数: 3 // B 商品剩余数: 0 // C 商品剩余数: 1 // E 商品剩余数: 2 // D 商品剩余数: 3 // 商品剩余数: 0
相关文章推荐
- (47)Java学习笔记——多线程 / 线程的安全问题
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- java 学习-----多线程的安全问题
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- java学习日记(6)____多线程的安全问题与死锁的产生
- java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
- java多线程学习之停止休眠中的线程问题
- Java学习笔记45(多线程二:安全问题以及解决原理)
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- Java多线程设计(三)线程安全问题
- 设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题
- java多线程学习一线程安全之内存、synchronized、volatile
- 黑马程序员——Java多线程之线程安全问题
- Java多线程中线程安全与锁问题
- java多线程(1):线程的创建和多线程的安全问题
- java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
- 学习笔记之Java线程安全杂谈(中)——Java内存模型、happens-before原则和DCL问题
- 静态变量、实例变量、局部变量在多线程环境下的线程安全问题 java 多线程