synchronized关键字我基本明白它的作用,但不知道synchronized( ){}同步代码块的括号内的对象有什么作用。
比如这段代码public class Javase111116_Thread_2 {    public static void main(String[] args) {
        Share share=new Share();
        MyThread t1=new MyThread(share);
        MyThread t2=new MyThread(share);
        t1.start();
        t2.start();
    }
}class MyThread extends Thread{
    protected Share s;
    public MyThread(Share ts){
        s=ts;
    }
    public void run(){
        s.show(this.getName());
    }
}class Share{
    protected Object o;
    public Share(){
        o=new Object();
    }
    public void show(String str){
        synchronized(this){  //__________________________这里换成 synchronized(o){ 程序结果仍然不变,也就是说
                                                                                   并没有影响对代码块的加锁
            for(int i=0;i<13000;i++){
                System.out.println(str);
            }
        }
    }
}那个Object o;没有什么实际意义只是为了代替"this"看看效果。所以请教各位:那个括号里的对象到底对synchronized同步代码块有什么作用和意义呢?
请各位赐教~~

解决方案 »

  1.   

    当括号里的对象没有被别的线程请求的时候才会执行synchronized代码块里的内容
      

  2.   

    synchronized(this)是把线程等待管理交给this对象,synchronized(o)是把线程等待管理交给o对象。
      

  3.   

    同步方法时,默认的同步锁就是(this);
    同步代码块的时候,就要指定一个共同的对象,来做为多个线程的同步锁. 只要能保证这些线程共用一个
    就行.
     o=new Object();
    这个o 除了做同步锁用外,没有别的用处.用this 的话,不用再new 一个对象出来了.如果要在方法和代码块之间同步,就代码块就只能用this了,否则就没有办法同步了.