3

鉴于此代码:

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在另一个之前打印它的名称吗?

4

1 回答 1

2

答:是的。synchronized函数完成后立即释放。
B. 是的。你可以,但如果你想这样做,你为什么要首先编写多线程代码?synchronized保证原子性,而不是关于订单的任何内容,但您可以通过等待标志更改来强制执行订单。无论如何,您要强制执行的是sequenceity。你可以在单线程环境中免费获得这个:)

于 2009-12-13T18:42:35.747 回答