请问各位大虾,synchronized (this)两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。那么synchronized ("A"),synchronized ("dhdhfh")表示什么意思呢?参数一个字符串

解决方案 »

  1.   

    我觉得你要弄清楚synchronized的本质。
    在java中,每个对象都持有一把对象锁,这是在java语言层实现的机制(有别于JAVA 5 中的lock),因此不需要显式释放锁。synchronized 是线程级的,并不是方法级的,因此如果两个方法都对同一个对象加了synchronized方法,并且在一个方法A中调用了另外一个方法B,如果线程调用方法A,也不会在A调用B时需要等待锁释放,因为此时线程已经获得锁了。回到你的问题,synchronized(this), 表示线程锁加在被调用对象本身上,因此,同一时刻,该对象只能有一个synchronized方法会被一个线程调用,其它线程调用的synchronized方法都会阻塞以等待锁的释放synchronized(this) 适用于方法彼此间都会修改对象的某个状态,如果在某个对象的两个synchronized彼此不会共享任何资源,比如A中修改资源r1,B中修改资源r2,则在A和B中同时加上synchronized(this)会引起不必要的性能开销,因为调用A和B的线程不必要同步,此时简单的办法就是通过为A和B加不同的锁:
    Object lock1 = new Object();
    Object lock2 = new Object();
    public void A(){
       synchronized(lock1){
     }
    }
    public void B(){
       synchronized(lock2){
      }
    }
    这样,调用A和B的线程之间不会同步,只有都调用A或者都调用B的线程间需要同步。希望对你有帮助
      

  2.   

    synchronized ("A"),synchronized ("dhdhfh")
    其实没啥意思
      

  3.   

    synchronized ("A"),synchronized ("dhdhfh")这个只是以一个字符串常量作为lock而已,保证只能有一个线程执行该方法。因为字符串常量在系统中只有一份