鉴于这种代码:

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 保证原子性,没有任何有关的顺序,但可以强制执行以通过在等待一个标志改变。无论如何,你正在强制执行的是 顺序性.你得到这种免费单螺纹环境:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top