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) {
// ...
}
}