题
鉴于这种代码:
public class Messager implements Runnable {
public static void main(String[] args) {
new Thread(new Messager("Wallace")).start();
new Thread(new Messager("Gromit")).start();
}
private String name;
public Messager(String name) { this.name = name; }
public void run() {
message(1); message(2);
}
private synchronized void message(int n) {
System.out.print(name + "-" + n + " ");
}
}
我明白了 synchronized
关键字使得该线依赖的对象锁。问题:
a)被锁中释放尽快的方法作为标记 synchronized
结束?或尽快线 run()
方法完成
b)我可以保证任何一个线程将打印的名称和 1 2
之前的其他?
解决方案
A.是的。这是释放尽快 synchronized
功能完成。
B。是的。你可以的,但如果你想要这样做,为什么你会写多线程的代码? synchronized
保证原子性,没有任何有关的顺序,但可以强制执行以通过在等待一个标志改变。无论如何,你正在强制执行的是 顺序性.你得到这种免费单螺纹环境:)
不隶属于 StackOverflow