使用synchronized方法 和 synchronized块
synchronized方法原理:首先,每个对象对应都有一把锁。当声明了synchronized方法,此时每个synchronized方法都必须获得锁才能执行,否则就会线程阻塞;方法一旦执行,就独占锁,直到方法返回才释放锁,后面被阻塞的线程才能获得这个锁,继续执行;
同步块synchronized(Obj){}原理: Obj称之为同步监视器, 同步方法无需指定同步监视器,因为指定是this(对象本身)
同步监视器的执行过程:(假设多个线程)
1.第一个线程访问,锁定同步监视器,执行其中代码
2.第二个线程访问,发现同步监视器被锁定,无法访问
3.第一个线程访问完毕,解锁同步监视器
4.第二个线程访问,发现同步监视器没有锁,然后锁定并访问
同步方法 是 默认锁的是this,指的是实例化的对象;
同步块 指定类 后,锁的是同一个类的实例,任意时刻只会有一个线程能获得资源;