我知道可以将代码块或实例块放入同步块中。因此,请考虑以下简短示例:

public class SynchronizedObject {
    public static void main(String args){
        System.out.println(" 1 " );

        synchronized(args){
            //do stuff
        }


在这种情况下,args是一个实例,对吗?而且这个实例也是一个对象?在任何情况下都不能将变量或局部变量放入同步块?

最佳答案

您的问题不清楚。您似乎混合使用块和语句:


在您的示例中,同步块是花括号内的任何内容,因此//do stuff部分。
在您的示例中,argssynchronized语句使用的锁。


您可能会受益于阅读tutorial


  可以在同步块中放入什么?


您想要的任何东西,只要它是有效的Java语句即可。


  args是一个实例,我正确吗?


args是对String实例的引用(尽管您可能是指String[])。


  这个实例也是一个对象?


是的,一个类的实例就是一个对象。


  在任何情况下都不能将变量或局部变量放入同步块?


在块内,您可以按照上面的说明执行所需的操作。 synchronized关键字(锁)的参数需要是对Object的非null实例的引用。如果您愿意的话,那可以是一个局部变量(尽管这很可能无法实现您的目标)。

10-07 20:57