多线程2:线程操作共享数据所引发的问题
来源:互联网 发布:网络用语xp是什么意思 编辑:程序博客网 时间:2024/06/07 07:11
概述:多线程操作共享区域可能会引发线程安全问题,
方式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(); }}
运行截图:
阅读全文
0 0
- 多线程2:线程操作共享数据所引发的问题
- 多线程的原子操作和线程数据共享
- java多线程操作共享数据的安全问题
- JAVA多线程的共享数据操作
- JAVA多线程的共享数据操作
- 进度条所引发的问题
- 多线程之线程范围内的数据共享ThreadLocal
- Posix多线程笔记(七)----- 线程数据共享的方式
- Java基础:多线程之线程范围内的数据共享ThreadLocal
- java多线程:5、线程范围内的数据共享_ThreadLocal
- 【多线程】-线程范围内共享数据的两种方式
- 由对BLOB数据的操作所引发的一系列思考
- 由对BLOB数据的操作所引发的一系列思考
- 两种多线程操作共享数据的方法
- EnterCriticalSection 多线程操作相同数据遇到的问题(线程锁)
- UNIX多线程数据共享与线程同步
- UNIX多线程数据共享与线程同步
- 多线程_线程范围内数据共享
- Java IO-InputStream家族 -装饰者模式
- 农X行限时购秒杀活动,jmeter压测脚本
- 计算机硬件入门 之 译码器(以74LS138为例)
- 新一代Java模板引擎Thymeleaf
- 统一访问方式和setter ----《Scala编程思想》
- 多线程2:线程操作共享数据所引发的问题
- POJ 1628 Deduction 笔记
- codevs 1907 解题报告 网络流
- (191)明暗处理
- USACO-Section1.2 Name That Number
- 如何给运行的tomcat指定特定的jdk版本以及验证
- 【剑指offer-解题系列(41)】和为S的连续正数序列
- 461. Hamming Distance
- jquery框架学习(keep update)