我知道可以将代码块或实例块放入同步块中。因此,请考虑以下简短示例:
public class SynchronizedObject {
public static void main(String args){
System.out.println(" 1 " );
synchronized(args){
//do stuff
}
在这种情况下,args是一个实例,对吗?而且这个实例也是一个对象?在任何情况下都不能将变量或局部变量放入同步块?
最佳答案
您的问题不清楚。您似乎混合使用块和语句:
在您的示例中,同步块是花括号内的任何内容,因此//do stuff
部分。
在您的示例中,args
是synchronized
语句使用的锁。
您可能会受益于阅读tutorial。
可以在同步块中放入什么?
您想要的任何东西,只要它是有效的Java语句即可。
args是一个实例,我正确吗?
args是对String
实例的引用(尽管您可能是指String[]
)。
这个实例也是一个对象?
是的,一个类的实例就是一个对象。
在任何情况下都不能将变量或局部变量放入同步块?
在块内,您可以按照上面的说明执行所需的操作。 synchronized
关键字(锁)的参数需要是对Object的非null实例的引用。如果您愿意的话,那可以是一个局部变量(尽管这很可能无法实现您的目标)。