Rhy*_*hys 6 java concurrency multithreading
拿这个帖子:
a = 3; b = 3;
并采取这个线程:
b = 5; a = 5;
它们都从Monitor访问相同的数据.
如果它们同时运行(通过使用线程),可能会产生什么结果?
因为线程的操作可以以任何顺序执行,所以a = 3,5和b = 3,5的任何组合都是可能的.
为未来的读者澄清:
Thread-1: a=3 b=3,
Thread-2: b=5 a=5
可能的运营订单:
I:Thread-1,Thread-1,Thread-2,Thread-2
II:Thread-1,Thread-2,Thread-1,Thread-2
III:螺纹-1,螺纹-2,螺纹-2,螺纹-1
IV:Thread-2,Thread-1,Thread-2,Thread-1
V:Thread-2,Thread-2,Thread-1,Thread-1
VI:Thread-2,Thread-1,Thread-1,Thread-2
让我们尝试每一个:
I: a=3, b=3, b=5, a=5 --> a=5, b=5
II: a=3, b=5, b=3, a=5 --> a=5, b=3
III: a=3, b=5, a=5, b=3 --> a=5, b=3
IV: b=5, a=3, a=5, b=3 --> a=5, b=3
V: b=5, a=5, a=3, b=3 --> a=3, b=3
VI: b=5, a=3, b=3, a=5 --> a=5, b=3
请注意,有四种方法可以提出a=5,b=3.因此,如果每个线程排序的可能性相当大,那么67%的时间会得出结果.但是,您无法保证这种可能性; 实际上,您几乎可以肯定操作系统会以某种未知的方式存在偏差.经验教训是,你不应该试图依赖未定义的行为为你做任何事情.
(我知道最后一部分有点超出了问题的范围,但我认为应牢记这一点.)