Java 学习笔记之 实例变量与线程安全
2024-09-01 08:26:05
实例变量与线程安全:
不共享数据:
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值没有重复,线程安全。
最新文章
- Android—ListView条目背景为图片时,条目间距问题解决
- ajax点赞功能
- jQuery eislideshow 图片轮播
- Linux shell 变量 数学 运算
- 一个自定义的窗体样式MessageBox控件
- 深入浅出MongoDB(二)概述
- jquery1.9学习笔记 之层级选择器(一)
- mysql--存储过程(入门篇)
- JenKins 环境搭建 for Centos6.5
- 第1 章MySQL 基本介绍
- Android学习笔记2——shape
- 交叉验证(CrossValidation)方法
- SuperMap iObject入门开发系列之二地下三维管线系统介绍
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
- spring的纯注解的IOC配置
- hpu_newoj_1028-exgcd
- node.js 安装 测试
- 安装lighttpd
- windows 2008 server R2 服务器docker安装
- Unity Mecanim 动画系统
热门文章
- 【Edu 67】 补题记录
- SDU暑期集训排位(8)
- BZOJ-2743: [HEOI2012]采花 前缀和 树状数组
- AOJ-2249-Road Construction-dijkstra-最小花费
- hdu6437 Problem L.Videos(网络流)
- codeforces 879 D. Teams Formation(思维)
- 003 Python基本语法元素
- 线上LVM磁盘挂载
- 深入理解three.js中平面光光源RectAreaLight
- kubernetes集群部署高可用Postgresql的Stolon方案