实例变量与线程安全:

不共享数据:

public class NoSharedThread extends Thread {
private int count = 5; public NoSharedThread(String name){
super();
this.setName(name);
} @Override
public void run() {
super.run();
while (count > 0){
count--;
System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);
}
}
} public class ThreadRunMain {
public static void main(String[] args) {
testSharedSafeThead();
} public static void testNoSharedThread() {
NoSharedThread a = new NoSharedThread("a");
NoSharedThread b = new NoSharedThread("b");
NoSharedThread c = new NoSharedThread("c");
a.start();
b.start();
c.start();
} }

运行结果:

可见线程之间没有互相干扰,都在操作自己的count变量。

共享数据:

public class SharedThread extends Thread{
private int count = 5;
public SharedThread(String name) {
super();
this.setName(name);
} @Override
public void run() {
super.run();
count--;
System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);
}
} public class ThreadRunMain {
public static void main(String[] args) {
testSharedThead(); } public static void testSharedThead(){
SharedThread st = new SharedThread("SharedThread");
Thread a = new Thread(st,"a");
Thread b = new Thread(st,"b");
Thread c = new Thread(st,"c");
Thread d = new Thread(st,"d");
Thread e = new Thread(st,"e");
a.start();
b.start();
c.start();
d.start();
e.start(); } }

运行结果:

可见线程之间互相干扰,产生count值一样的情况,非线程安全的问题出现。

共享数据线程安全:

public class SharedSafeThread extends Thread{
private int count = 5;
public SharedSafeThread(String name) {
super();
this.setName(name);
} @Override
public synchronized void run() {
super.run();
count--;
System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);
} } public class ThreadRunMain {
public static void main(String[] args) {
testSharedSafeThead();
} public static void testSharedSafeThead(){
SharedSafeThread sst = new SharedSafeThread("SharedSafeThread");
Thread a = new Thread(sst,"a");
Thread b = new Thread(sst,"b");
Thread c = new Thread(sst,"c");
Thread d = new Thread(sst,"d");
Thread e = new Thread(sst,"e");
a.start();
b.start();
c.start();
d.start();
e.start(); } }

运行结果:

可见线程之间没有互相干扰,count值没有重复,线程安全。

最新文章

  1. Android—ListView条目背景为图片时,条目间距问题解决
  2. ajax点赞功能
  3. jQuery eislideshow 图片轮播
  4. Linux shell 变量 数学 运算
  5. 一个自定义的窗体样式MessageBox控件
  6. 深入浅出MongoDB(二)概述
  7. jquery1.9学习笔记 之层级选择器(一)
  8. mysql--存储过程(入门篇)
  9. JenKins 环境搭建 for Centos6.5
  10. 第1 章MySQL 基本介绍
  11. Android学习笔记2——shape
  12. 交叉验证(CrossValidation)方法
  13. SuperMap iObject入门开发系列之二地下三维管线系统介绍
  14. 深度学习之卷积神经网络(CNN)详解与代码实现(一)
  15. spring的纯注解的IOC配置
  16. hpu_newoj_1028-exgcd
  17. node.js 安装 测试
  18. 安装lighttpd
  19. windows 2008 server R2 服务器docker安装
  20. Unity Mecanim 动画系统

热门文章

  1. 【Edu 67】 补题记录
  2. SDU暑期集训排位(8)
  3. BZOJ-2743: [HEOI2012]采花 前缀和 树状数组
  4. AOJ-2249-Road Construction-dijkstra-最小花费
  5. hdu6437 Problem L.Videos(网络流)
  6. codeforces 879 D. Teams Formation(思维)
  7. 003 Python基本语法元素
  8. 线上LVM磁盘挂载
  9. 深入理解three.js中平面光光源RectAreaLight
  10. kubernetes集群部署高可用Postgresql的Stolon方案