java + 线程系列之解决多线程抢占后数据不完整现象(四)
2017-06-05 20:40
302 查看
为了展示这个现象我依然新建了一个类来展示
//这里就出现了数据缺失的现象 为了解决这一问题 下一节 就要说到一个关键字synchronized
//定义了一个count值 让它循环自减1 public class DemoThread extends Thread { private static int count = 10000; @Override public void run() { super.run(); for (int i = 0; i < 2500 ; i++) { count -= 1; System.out.println(count); } } } //Main函数中调用 private static void showQuestion() { //如果想要解决这个现象 //需要使用到同步关键字---synchronized DemoThread d1 = new DemoThread(); DemoThread d2 = new DemoThread(); DemoThread d3 = new DemoThread(); DemoThread d4 = new DemoThread(); d1.start();//取值为10000 做-1后为9999 //但是还没有输出9999呢,就被抢占走了执行权 // 就会出现9999在9998或者小于9999的数字下面 d2.start();//d2取值为300,在做-1操作后赋值给count时 d3可能也取到了300,做了-1操作 // 那么d2和d3这两次操作实际上只让count减少了1 // 所以可能会在出现四个线程执行完毕,结果大于0的情况 d3.start(); d4.start(); } //输出结果!
//这里就出现了数据缺失的现象 为了解决这一问题 下一节 就要说到一个关键字synchronized
相关文章推荐
- Java线程同步锁解决共享数据安全
- Delphi中多线程用Synchronize实现VCL数据同步显示 解决在线程中操作控件出现问题
- Java多线程系列--“基础篇”10之 线程优先级和守护线程
- Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例
- Java多线程研究(八)使用Exchange在多个线程间交换数据
- Java线程同步锁解决共享数据安全
- 黑马程序员--JAVA基础复习之多线程(二)线程安全与解决方法
- java多线程与线程并发四:线程范围内的共享数据
- Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法
- Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例
- 初学Java多线程:从线程返回数据的两种方法
- 七、初学Java多线程:向线程传递数据的三种方法(没感觉三种方法有什么区别?)
- java多线程系列_线程简介(1)
- Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
- Java多线程: 向线程传递数据的三种方法(转)
- java多线程系列_用Thread类创建线程(2)
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- java多线程系列_线程的生命周期(4)
- java多线程与线程并发五:多个线程访问共享对象和数据的方式
- java多线程编程之从线程返回数据的两种方法