multithreading - 多线程(在Java中)

标签 multithreading

我试图理解多线程,并对多个线程的执行时间如何导致诸如竞态条件之类的问题感到困惑。我最近在一篇文章中读到了这篇文章:“当您引入多线程的概念时,您就发现了两个线程同时访问/修改内存中同一对象的可能性。” “同时”到底是什么意思?这是否意味着多个线程可以在同一时间实例读取一个内存位置,例如,两个线程恰好在1.1秒标记处读取变量a的值?如果是,那么实际上来自Java Concurrency的此图是否暗示线程B比线程A晚一点读取值9?我应该如何解释?

enter image description here

最佳答案

我会尽量清楚和简短。

假设您在内存的某些部分中存储了一些变量,地址为0x101010。假设此变量是一个计数器,用于计算调用某个函数(X)的次数。调用函数X的有两个线程(A和B)。A调用了X,0.0001毫秒后B也调用了X。假设计数器的初始值为0。然后A在时间0s读取值为零,并在时间0.0002 ms递增该值。因此,在时间0.0002 ms处的值为1。但是,B已在时间0.0001ms处读取了该值(0.0001 <0.0002)。此时计数器仍为零。并在时间0.0003毫秒处将其增加到1。最后,计数器值为1,应为2。

关于multithreading - 多线程(在Java中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364611/

相关文章:

java - 为什么 Thread.sleep 不好用

java - 反向读写锁

java - 来自 socket.getInputStream() 的 ObjectInputStream

c++ - 生成 C++ 进程的线程转储

multithreading - 在用户级线程中阻塞

java - 为什么我运行这段代码时永远不会死锁?

c++ - 如何使用 TBB/OpenMP 锁定数组元素

c# - COM 加载项 : Resolve the error DisconnectedContext in WinWord. exe

c# - 如何使 .NET COM 对象成为单元线程?

java - 在 Java 中,每个线程可能是 Singleton 吗?