在什么时候要在方法之前加“synchronized”,还有看了线程同步,对这个概念还是有点搞不懂。希望能解释一下

解决方案 »

  1.   

    synchronized一般来说是多线程可能同时访问共享资源的时候使用。相当对访问共享资源的代码加上锁。这样每次就只允许一个线程进入。不过线程同步是很复杂的,很多要注意的细节,期望在这里有人三言两语给你解析得清清楚楚,不如找本好书看看。
      

  2.   

    在某个对象的所有synchronized方法中,在某个时刻,只能有唯一的一个线程去访问这些synchronized方法.
      

  3.   

    synchronized{
       **********
    }
    括号里面的内容在同一时间只能允许一个线程去访问,这样就保证了多线程不会造成共享数据的不一致
      

  4.   

    楼上说得不全对,应该说是所有非静态的方法。其实java对与每个对象都有一把锁。synchronized这个关键字就是用来获得这把锁的。
    情况大概可以分三类:
    1. synchronized用在非静态成员函数上,获得this这个对象的锁。所以其他线程不能再调用“这个”对象的所有synchronized方法。
    2. synchronized用在静态成员函数上,获得是当前类的Class对象。由于在JVM中,没个类的Class对象是唯一的,所以其他线程不能再调用这个类“所有”对象的所有synchronized方法。
    3. synchronized语句块。对于这种情况,就看你自己怎么去设定要获得什么锁。
    例如synchronized(this){} 就和第一仲情况差不多,synchronized(ClassName.class){}这样就和第二种情况类似。