about java synchronized

synchronized如果作用于一个类的普通方法中,那么当使用该类实例化出多个对象,那么每个对象实例的synchronized方法是独立的(相当于没用?)。这种情况下当一个线程获得某个方法的锁时,同 
个实例中其他同样声明了synchronized的区域会被锁了起来。

synchronized如果作用于一个类的静态方法中,那么它可以对类的所有实例起到同步访问的作用 。

也可以使用synchronized(this){}作用于一个代码块,但是它只适合一个明确的对象作为锁(以为this, 即生成的对象实例)。不然的话,只是想让一段代码同步,可以自己定义个一个对象类型(如随便定义一 个数组byte[]),作为被锁对象。如果一个类中使用多个synchronized(this)同步块,那么这就相当于上 面第一段后半段所述的,一个获得锁,其他所有相同的(this)代码块都同步访问。但是如果声明了多个用于同步的实例的话,那么这就相当于不同的代码块之间的同步不受影响。

posted on 2018-08-20 23:13  植物大戰僵尸  阅读(125)  评论(0编辑  收藏  举报

导航