Ank*_*lok 12 java concurrency multithreading
我的问题是,如果我有一些像以下代码 - :
public class OuterClass{
public class InnerClass{
public synchronized methodA(){ /* does something */}
}
}
Run Code Online (Sandbox Code Playgroud)
现在当多个线程想要调用内部类方法时,它们将获取外部类对象或内部类对象的锁定,以及如何修改语句以便我同步对外部类对象的访问
use*_*421 19
当多个线程想要调用内部类方法时,它们将获取外部类对象的锁
没有.
或者用于内部类对象
是.
以及如何修改语句以便我同步访问外部类对象/
加:
synchronized (OuterClass.this)
{
}
Run Code Online (Sandbox Code Playgroud)
在方法内部,但请注意,在外部锁定之前获取内部锁定,正如语法现在应该建议的那样.一致的锁定顺序对于防止死锁至关重要.您可能更喜欢先获取外部锁,在这种情况下,您应该这样做:
public void methodA()
{
synchronized(OuterClass.this)
{
synchronized (this)
{
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有synchronized声明方法本身.或者,如果您只想要外锁,请执行以下操作:
public void methodA()
{
synchronized(OuterClass.this)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6801 次 |
| 最近记录: |