我们常常会在方法前加一个synchronized认为这样就相当于加了锁就可以线程安全了,不知道你是不是这样的人。哈哈哈!反正我以前是!
言归正传!其实synchronized可以锁方法,可以锁代码块。
当一个类实例化一个对象时,如果里面的方法加了synchronized,这就是所谓的非静态同步方法!
非静态同步方法都是用同一把锁––实例的对象本身!也就是说实例里面的其它非静态同步方法必须等待获取锁的方法释放锁后才能开始执行!
那么问题来了,如果多个实例对象呢?多线程的实例对象执行同一个方法时呢?这样再加个synchronized锁方法还可以吗?经过测试打log表明是不行的!上面也说过那一把锁是实例对象本身!我们现在是在不同的实例啊!!!那么我们就要使用static去修饰那个方法了!
所有静态同步方法用的都是同一把锁––类本身对象!这样多线程的实例对象就会按顺序去执行这个静态方法了!
先这样吧!码字累。
网友评论