可见性案例原理分析
来源:互联网 发布:文件夹备份软件 编辑:程序博客网 时间:2024/06/06 03:10
public class RunThread extends Thread{
private volatile boolean isRunning = true;//如果加上volatile 当前变量改变的时候 会强制“引用此变量”的线程 来重新读取此变量的值
private void setRunning(boolean isRunning){
this.isRunning = isRunning;
}
/**
* 注解:jdk1.5以后 对每一个线程分配一块空间 用来存放主内存中一些引用(拷贝一些副本,如案例中的isRunning),从而提升执行的效率
*
* TODO 简单描述该方法的实现功能(可选).
* @see java.lang.Thread#run()
*/
public void run(){//
System.out.println("进入run方法...");
while(isRunning == true){
}
System.out.println("线程停止");
}
public static void main(String[] args) throws InterruptedException {
RunThread rt = new RunThread();
rt.start();
Thread.sleep(3000);
rt.setRunning(false);
System.out.println("isRunning的值已经被设置成了false");
Thread.sleep(1000);
System.out.println(rt.isRunning);
}
private volatile boolean isRunning = true;//如果加上volatile 当前变量改变的时候 会强制“引用此变量”的线程 来重新读取此变量的值
private void setRunning(boolean isRunning){
this.isRunning = isRunning;
}
/**
* 注解:jdk1.5以后 对每一个线程分配一块空间 用来存放主内存中一些引用(拷贝一些副本,如案例中的isRunning),从而提升执行的效率
*
* TODO 简单描述该方法的实现功能(可选).
* @see java.lang.Thread#run()
*/
public void run(){//
System.out.println("进入run方法...");
while(isRunning == true){
}
System.out.println("线程停止");
}
public static void main(String[] args) throws InterruptedException {
RunThread rt = new RunThread();
rt.start();
Thread.sleep(3000);
rt.setRunning(false);
System.out.println("isRunning的值已经被设置成了false");
Thread.sleep(1000);
System.out.println(rt.isRunning);
}
}
volatile不具备原子性,实验如下
public class VolatileNoAtomic extends Thread{
private static volatile int count;
// private static AtomicInteger count = new AtomicInteger(0);
private static void addCount() {
for(int i=0;i<1000;i++){
count++;
// count.incrementAndGet();
}
System.out.println(count);
}
public void run(){
addCount();
}
public static void main(String[] args) {
VolatileNoAtomic[] arr = new VolatileNoAtomic[10];
for(int i=0;i<10;i++){
arr[i] = new VolatileNoAtomic();
}
for(int i=0;i<10;i++){
arr[i].start();
}
}
}
阅读全文
0 0
- 可见性案例原理分析
- 可见性问题小案例
- volatile可见性原理
- 监听器原理与案例分析
- Android AsyncTask案例原理分析
- C++中继承的可见性分析
- Java多线程之可见性分析
- java多线程内存可见性分析
- Java volatile关键字可见性分析
- struts2拦截器实现原理案例分析
- RMAN Crosscheck原理及案例分析
- readLine方法的原理和案例分析
- MySQL排序原理与案例分析
- 策略模式原理及案例分析
- 模板模式原理及案例分析
- php+mysql分页原理案例分析
- MySQL排序原理与案例分析
- ChainMapper/ChainReducer实现原理及案例分析
- 欢迎使用CSDN-markdown编辑器
- ANDROID 初学者的 GRADLE 知识普及
- SQL Server跨server执行select into
- 梯度下降算法
- go string []byte相互转换
- 可见性案例原理分析
- 经典的TCP性能问题
- <iOS读书笔记>之Effective Objective-C 2.0
- OpenGlES--光照
- AVR32学习链接记录
- Ubuntu安装Python的包管理工具Pip
- 【Python】os.path.join
- CUDA一维纹理内存
- Yii的日常操作笔记