为什么在执行synchronized方法后线程仍然锁定?

时间:2018-05-25 03:56:30

标签: java multithreading

我正在阅读java多线程教程,该教程说线程只会在完成同步方法之前放弃密钥,但是当我运行以下代码(大约20次)时:

public class SyncDemo implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            sync();
        }
    }

    private synchronized void sync() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        SyncDemo s = new SyncDemo();
        Thread a = new Thread(s, "a");
        Thread b = new Thread(s, "b");
        a.start();
        b.start();
    }
}

它只打印a然后b,我希望它们是混合序列,因为当前线程在循环内执行sync()后每次都会解锁?从而让另一个线程有机会打印它的名字?

1 个答案:

答案 0 :(得分:0)

您的程序中没有任何内容需要某个执行顺序。因此,运行时将以在当前情况下最有意义的方式调度线程。可能影响订单的因素包括处理器数量,负载情况......