多线程数据改变导致可见性问题整理
来源:互联网 发布:网络伤感情歌 编辑:程序博客网 时间:2024/05/17 22:50
这里也是一个比较好玩的话题:
梳理:当一个线程访问数据,是串行的,也就是第一次改变数据,第二次访问
肯定是拿到改变后的数据。而多线程就没有这么好的命运了。当A
改变数据,B去拿的时候可能数据源根本没有变化,错误以为没有改变。
JAVA并发编程实战举了一个例子。
当A尝试改变一个数据,同时改变状态为已经改变的状态。
B检查状态改变做相应的处理。当简单的多线程甚至是加锁处理发现效果并不满意:
原因很简单:加锁防止别的线程访问,但是自己改变了数据并不能及时的通知对方。
public class Down extends Thread{ static boolean isChanged; static int count; static DownloadEntity downloadEntity=new DownloadEntity(); public static void main(String args[]) { new ReadThread().start(); isChanged=true; count=111; } static class ReadThread extends Thread { public void run() { while(!isChanged) Thread.yield(); System.out.print(count); } } public void run() { downloadEntity.get(System.currentTimeMillis()); } public static void print() { System.out.print(downloadEntity.get(System.currentTimeMillis())); }}
很遗憾,这段代码执行完了
那么是什么导致》?待:
主要是set/get未上锁,待论证
0 0
- 多线程数据改变导致可见性问题整理
- java多线程可见性
- 多线程的可见性
- [Java 多线程] 变量可见性
- 多线程的内存可见性
- Java多线程内存可见性
- java多线程的可见性
- Java多线程:内存可见性
- JAVA多线程内存可见性
- java多线程之可见性
- volatile关键字用法以及线程数据可见性的问题
- 可见性的问题
- 多线程 改变目录问题
- 页面可见性改变事件 : visibilitychange
- Java内存模型与多线程数据可见性和操作的有序性
- SimpleDateFormat导致的多线程问题
- 多线程原子性、可见性、可排序
- Java多线程之内存可见性
- 《算法概论》习题8.19 风筝图
- 错误ERROR 1935 安装程序集的解决办法
- jQuery—为什么要有个$
- Remove Duplicates from Sorted Array (II)
- 总结65
- 多线程数据改变导致可见性问题整理
- 148. Sort List
- 关于Linux文件的那些事情之一
- PhysX3.3.4 snippets—SnippetHelloWorld (3)
- 初识STL
- Shell 概述
- linux安装包管理(未完待续)
- 高精度减法模板
- 一个有趣的并行程序