public class Letters extends Thread{
    private String name;
    public Letters(String name) {
        this.name=name;
    }
    public void write(){
        System.out.print(name);
        System.out.print(name);
    }
        public void run(){
        synchronized (System.out){//或者用 synchronized (Letters.class){            x
            write();
        }
    }
    
    public static void main(String[] args) {
        new Letters("X").start();
        new Letters("Y").start();
    }
}
x 行中 System.out 或者Letters.class 在这里分别代表什么啊?? 为什么这样用呢? 目的想让这个程序输出 XXYY或 YYXX

解决方案 »

  1.   

    x 行中 System.out 或者Letters.class只是代表synchronized的监听器对象!
      你用其它的对象都是可以的,譬如你用this也行,你自己随便定义一个Stirng str="",用str也可以!
        这个监听器对象是随意的.
     为什么这样用呢?是因为java中规定了synchronized关键字必须要这么用啊,是语法上的规定啦!
      

  2.   

    synchronized  同步关键字
      

  3.   

    synchronized (System.out){//或者用 synchronized (Letters.class){的含义就是说每个到达这里的线程都要获得System.out(或者Letters.class)这个对象的同步锁,才能执行下去,否则只能等待.而且每个对象都有一个线程等待集合.所有请求该对象同步锁没有成功的线程都会被该集合所存储.一旦该对象的同步锁被释放,它就会通知这个集合中所有的对象,同步锁又可以使用了.