java 如果一次运行一个线程为什么需要同步

标签 java multithreading synchronization

当多个线程同时运行时,为什么需要同步以避免访问共享资源时出现“问题”?

我对多线程编程和同步概念都很陌生。谁能解释一下吗?

最佳答案

假设这个方法:

private int value = 0;

public void computeStuff()
{
    int tmp = value;
    tmp++;
    value = tmp;
}

假设有 1000 个线程调用此函数。如果没有同步,多个线程可以并行执行计算,并且不确定谁的结果将写入value。在分配tmp 和最终分配value 之间,一个线程的执行可能会被中断。最终结果是 value 可能不等于 1000,但可能是某个更低的值。

通过在方法中添加synchronize,所有线程都会一一调用它。是的,这会比没有同步时慢,因为某些线程将被迫等待挂起的锁。但好消息是我们保证结果将为 1000

(请注意,我知道这是一个愚蠢的例子 - 我喜欢愚蠢的例子)

关于java 如果一次运行一个线程为什么需要同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794340/

相关文章:

javascript - Web Workers 中的 Performance.now() 可靠吗?

c# - 使用线程会节省时间吗?

java - Cobertura 如何识别代码中的分支?

java - Android 应用程序的时间圈动画

c++ - 了解 std::hardware_破坏性_interference_size 和 std::hardware_constructive_interference_size

c++ - 共享内存中进程间的屏障实现

java - 将文件上传到保管箱(通过同步)

java - 在可以避免的情况下需要在迭代时手动同步 Synchronized 列表吗?

java - 在磁盘上写入文件的进程每秒的请求数较低

java - 为什么我的小程序不请求我的许可,而是抛出 AccessControlException?