Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java同步_Java_Multithreading_Thread Safety - Fatal编程技术网

Java同步

Java同步,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,这是什么 synchronized (this) { // ...some code... } 好吗? (你能举个例子吗?它阻止对资源的并发访问。Sun的示例非常丰富。它阻止多个线程运行大括号中包含的代码。当一个线程运行该代码时,其余线程被阻塞。当第一个线程完成时,其中一个被阻止的线程将运行同步代码,依此类推 你为什么要这样做?块中的代码可能会修改对象,使其处于不一致状态,直到块退出。因此,第二个线程将发现不一致的对象。从那时起,混乱接踵而至 例如,从一个池中删除一个对象并将其插入另一

这是什么

synchronized (this) {
    // ...some code...
}
好吗?
(你能举个例子吗?

它阻止对资源的并发访问。Sun的示例非常丰富。

它阻止多个线程运行大括号中包含的代码。当一个线程运行该代码时,其余线程被阻塞。当第一个线程完成时,其中一个被阻止的线程将运行同步代码,依此类推

你为什么要这样做?块中的代码可能会修改对象,使其处于不一致状态,直到块退出。因此,第二个线程将发现不一致的对象。从那时起,混乱接踵而至

例如,从一个池中删除一个对象并将其插入另一个池中。第二个线程可能在第一个线程移动对象时运行,然后在两个集合中找到引用的对象,或者两者都没有


您还可以使用此机制限制多个线程访问为一个资源(例如,一个普通数据库)使用的资源。

来自现已失效的Java Quick Reference(以前位于
http://www.janeg.ca/scjp/threads/synchronized.html

同步线程具有以下效果 对数据块的序列化访问 线程上运行的代码。 在这种情况下序列化意味着 一次给一个线程正确的 执行特定的代码块


请注意,以下两项是等效的:

synchronized void someMethod() {
    // ...
}

void someMethod() {
    synchronized (this) {
        // ...
    }
}