多线程并发可能造成的问题
2018-03-23 11:22
176 查看
2018年3月23日11:21:16
1 对于共享数据的修改读取的脏读等
(并发下的主内存和副本内存之间的变量的不可见行,volatile关键字可解决)
(4字符问题,jvm允许对一个非volatile的64位(8字节)变量赋值时,分解为两个32位(4字节)来完成,但并不是必须要一次性完成(从java的角度来理解,在虚指令中对变量的操作都是slot为单位的,每个slot就是4字节)。那么问题来了,如果变量是long double类型的数据,在赋值某个32位后,正好被另一个线程读取,那么读出来的数据可能就不是预期的结果,volatile可解决)
2 因为指令重排序,并发的执行 顺序可能不是我们代码预期那样
待续。。。
1 对于共享数据的修改读取的脏读等
(并发下的主内存和副本内存之间的变量的不可见行,volatile关键字可解决)
(4字符问题,jvm允许对一个非volatile的64位(8字节)变量赋值时,分解为两个32位(4字节)来完成,但并不是必须要一次性完成(从java的角度来理解,在虚指令中对变量的操作都是slot为单位的,每个slot就是4字节)。那么问题来了,如果变量是long double类型的数据,在赋值某个32位后,正好被另一个线程读取,那么读出来的数据可能就不是预期的结果,volatile可解决)
2 因为指令重排序,并发的执行 顺序可能不是我们代码预期那样
待续。。。
相关文章推荐
- 多线程并发访问可能出现的崩溃问题
- C# 多线程中经常访问同一资源可能造成什么问题?
- 面试常问问题:银行网上支付项目中怎么控制多线程高并发访问?
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)(r)
- JAVA多线程不安全问题解决方案(多线程并发同一资源)。
- java多线程_并发问题的解析
- Servlet的自动加载、对比有参的init方法和无参的init方法、Servlet的多线程并发问题
- objective-c 多线程并发售票问题 NSLock 临界资源 临界区
- 关于数据库对象所有者非dbo时的可能造成的问题及解决方法
- Android debug 版本为什么system/bin下面的问题,push进去之后,可能造成手机不能开机
- JAVA高并发多线程必须懂的50个问题
- 多线程并发问题
- 用 @property 声明的 NSString (或 NSArray,NSDictionary) 经常使用 copy 关键字,为什么?如果改用strong关键字,可能造成什么问题?
- C#多线程之三:解决多线程编程中大并发数等待唤醒的问题
- 指令重排的原因以及可能造成的问题
- SQLite并发操作下的分析与处理,解决database is locked,以及多线程下执行事务等问题
- 高并发操作同一个数据造成错误逻辑数据问题
- C#多线程之解决多线程编程中大并发数等待唤醒的问题
- java:多线程、并发相关问题
- lucene多线程并发的问题