我正在阅读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()
后每次都会解锁?从而让另一个线程有机会打印它的名字?
答案 0 :(得分:0)
您的程序中没有任何内容需要某个执行顺序。因此,运行时将以在当前情况下最有意义的方式调度线程。可能影响订单的因素包括处理器数量,负载情况......