多线程2:线程操作共享数据所引发的问题
2017-05-30 10:57
190 查看
概述:多线程操作共享区域可能会引发线程安全问题,
运行截图:
运行截图:
运行截图:
方式1:没有操作共享数据线程类(不会存在线程安全问题)
package com.thread.n2; /** * Created by Zetting on 2017/5/30. * 没操作共享数据,不存在线程安全问题 */ public class NotShareSafeMode extends Thread { private int count = 5; /** * 初始化 * @param name */ public NotShareSafeMode(String name){ super(); this.setName(name); } @Override public void run(){ while(count > 0 ){ count -- ; System.out.println(String.format("Thread %s ,the privale count is :%d", currentThread().getName(),count)); } } /** * 测试类 * @param args */ public static void main(String[] args){ /** * 没有采用操作共享数据线程类 * 所有开启的线程数据都是相互独立的,所有不存在线程安全问题 * **/ NotShareSafeMode notNotShareSafeModeThreadA = new NotShareSafeMode("A"); NotShareSafeMode notNotShareSafeModeThreadB = new NotShareSafeMode("B"); NotShareSafeMode notNotShareSafeModeThreadC = new NotShareSafeMode("C"); NotShareSafeMode notNotShareSafeModeThreadD = new NotShareSafeMode("D"); notNotShareSafeModeThreadA.start(); notNotShareSafeModeThreadB.start(); notNotShareSafeModeThreadC.start(); notNotShareSafeModeThreadD.start(); } }
运行截图:
方式2:操作共享数据线程类(存在线程安全问题)
package com.thread.n2; /** * Created by Zetting on 2017/5/30. * 有操作共享数据,但 存在线程问题 */ public class ShareNotSafeMode extends Thread{ /** * 采用操作共享数据线程类 */ private int count = 5; @Override public void run(){ try { super.run(); count -- ; Thread.sleep(500L); System.out.println(String.format("Thread %s ,the privale count is :%d", currentThread().getName(), count)); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 测试类 * @param args */ public static void main(String[] args){ /**操作共享数据线程类**/ ShareNotSafeMode shareSafeMode =new ShareNotSafeMode(); Thread shareThreadA = new Thread(shareSafeMode,"A"); Thread shareThreadB = new Thread(shareSafeMode,"B"); Thread shareThreadC = new Thread(shareSafeMode,"C"); Thread shareThreadD = new Thread(shareSafeMode,"D"); Thread shareThreadE = new Thread(shareSafeMode,"E"); shareThreadA.start(); shareThreadB.start(); shareThreadC.start(); shareThreadD.start(); shareThreadE.start(); } }
运行截图:
方式3:操作共享数据线程类(不存在线程安全问题)
package com.thread.n2; /** * Created by Zetting on 2017/5/30. * 有操作共享数据,但不存在线程安全问题 */ public class ShareSafeMode extends Thread{ /** * 采用操作共享数据线程类* */ private int count = 5; @Override synchronized public void run(){ try { super.run(); count -- ; Thread.sleep(500L); System.out.println(String.format("Thread %s ,the privale count is :%d", currentThread().getName(), count)); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 测试类 * @param args */ public static void main(String[] args){ /**操作共享数据线程类**/ ShareSafeMode shareSafeMode =new ShareSafeMode(); Thread shareThreadA = new Thread(shareSafeMode,"A"); Thread shareThreadB = new Thread(shareSafeMode,"B"); Thread shareThreadC = new Thread(shareSafeMode,"C"); Thread shareThreadD = new Thread(shareSafeMode,"D"); Thread shareThreadE = new Thread(shareSafeMode,"E"); shareThreadA.start(); shareThreadB.start(); shareThreadC.start(); shareThreadD.start(); shareThreadE.start(); } }
运行截图:
相关文章推荐
- 线程同步(信号量,互斥,条件变量) 分类: linux应用程序 2008-04-08 09:43 2587人阅读 评论(1) 收藏 举报 进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法
- java多线程操作共享数据的安全问题
- 黑马程序员——java中两个线程对同一个数据做不同操作的安全问题
- 对于快速连续点击Button操作从而引发的多次提交数据问题;
- 线程间的通信 共享数据安全问题
- java,线程操作,同步访问共享的可变数据
- Java线程共享数据操作
- 求助,关于MFC线程数据共享的问题
- 多线程一共就俩问题:1.线程安全(访问共享数据) 2.线程通信(wait(),notify())
- Delphi中多线程用Synchronize实现VCL数据同步显示 解决在线程中操作控件出现问题
- Java并发编程之——原子变量(解决一些线程共享数据问题)
- EnterCriticalSection 多线程操作相同数据遇到的问题(线程锁)
- 多个线程之间共享数据的方式(卖票问题,存取款问题)
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- 多线程的原子操作和线程数据共享
- Java多线程/并发05、synchronized应用实例:线程间操作共享数据
- Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题
- 线程之间共享数据(两个线程之间使用同一份数据),线程锁要统一,不统一的话会出现线程安全问题
- 多个线程之间共享数据的方式(卖票问题,存取款问题)
- Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法