use*_*ser 7 java multithreading thread-safety
这是什么:
synchronized (this) {
// ...some code...
}
Run Code Online (Sandbox Code Playgroud)
好吗?(你能写一个例子吗?)
Bri*_*new 13
它可以防止多个线程运行大括号中包含的代码.当一个线程正在运行该代码时,其余部分将被阻止.当第一个线程完成时,其中一个被阻塞的线程将运行同步代码,依此类推.
你为什么要这样做?块内的代码可以修改对象,使得它们处于不一致状态,直到块退出.所以进入的第二个线程会发现不一致的对象.从那时起,混乱随之而来.
一个例子是从一个池中删除一个对象并将其插入另一个池中.第二个线程可能在第一个线程移动对象时运行,然后找到两个集合中引用的对象,或者两者都没有.
您还可以使用此机制来限制多个线程访问旨在由一个资源(例如,普通数据库)使用的资源.
Jes*_*per 11
请注意,以下两个是等效的:
synchronized void someMethod() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
和
void someMethod() {
synchronized (this) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4014 次 |
| 最近记录: |