多级同步语句的目的是什么?

用户名

我真的不明白多级同步语句的目的是什么?例如,在代码中:

static void m() throws Exception {
    synchronized (sync) {
        System.err.println("First level synchronized");
        synchronized (sync) {
            System.err.println("Second level synchronized");
            synchronized (sync) {
                System.err.println("Third level synchronized");
            }
        }
    }
}

public static void main(String[] args) throws Exception {
    Runnable r = new Runnable() {
        @Override
        public void run() {
            try {
                m();
            } catch (Exception ex) {
                Logger.getLogger(IO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    };
    Thread th1 = new Thread(r);
    Thread th2 = new Thread(r);
    th1.run();
    th2.run();
}

如果某个线程已经开始执行一个同步语句,则不可能对任何线程执行最封闭的同步语句。因此,我看不到这种构造的任何用处。您能提供一个例子来理解这种用法​​吗?

嵌套的同步语句的另一个示例可以在官方JLS规范中找到:http : //docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.19

蜘蛛鲍里斯(Boris)

根据OP的评论,这来自JLS§14.19

class Test {
    public static void main(String[] args) {
        Test t = new Test();
        synchronized(t) {
            synchronized(t) {
                System.out.println("made it!");
            }
        }
    }
}

JLS继续说:

请注意,如果不允许单个线程多次锁定监视器,则该程序将死锁。

此示例旨在说明synchronized块是可重入的。

该JLS不是有用的编码实践的文档

它旨在说明该语言应如何工作。它记录了语言构造并定义了它们的行为-这是一个规范

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多级同步语句的目的是什么?

来自分类Dev

同步运行任务的目的是什么,何时执行?

来自分类Dev

将参数传递到同步块的目的是什么?

来自分类Dev

同步运行任务的目的是什么,何时执行?

来自分类Dev

此代码中的if语句while和for循环的目的是什么?

来自分类Dev

typedef语句的不同命名方式的目的是什么?

来自分类Dev

在 Python 中,return 语句中尾随逗号的目的是什么?

来自分类Dev

UserControl的目的是什么?

来自分类Dev

$ eq的目的是什么

来自分类Dev

工厂的目的是什么?

来自分类Dev

分区的目的是什么

来自分类Dev

宏的目的是什么?

来自分类Dev

XNoImplicitPrelude的目的是什么?

来自分类Dev

Intersect({},....)的目的是什么?

来自分类Dev

架子的目的是什么?

来自分类Dev

“内核”的目的是什么?

来自分类Dev

$ eq的目的是什么

来自分类Dev

glVertexPointer的目的是什么?

来自分类Dev

Gradle的目的是什么?

来自分类Dev

“?扩展A”的目的是什么?

来自分类Dev

UserControl的目的是什么?

来自分类Dev

vertexAttribPointer的目的是什么?

来自分类Dev

CMakeScripts的目的是什么?

来自分类Dev

returnObjectsAsFaults的目的是什么

来自分类Dev

ODR的目的是什么?

来自分类Dev

liftIO的目的是什么?

来自分类Dev

ImportSystemModules的目的是什么?

来自分类Dev

“ FutureOr”的目的是什么?

来自分类Dev

=>在julia的目的是什么