synchronized的三种应用方式
(1)修饰实例方法
(2)修饰静态方法
(3)修饰代码块
修饰实例方法
/***
* 代码1-1
*/
public class SynDemo implements Runnable{
static int i=0;
public synchronized void increase(){
i++;
}
public void run(){
for(int j=0;j<1000000;j++){
this.increase();
}
}
public static void main(String[] args){
SynDemo demo = new SynDemo();
Thread t1 = new Thread(demo);
Thread t2 = new Thread(demo);
t1.start();
t2.start();
t1.join();
t2.join();
}
}
在代码1-1中,我们开启了两个线程对全局变量i进行了加1的操作。在这个过程中,为了保证线程安全,由于我们对实例方法increase()进行了synchronized的修饰。此时线程会对对象锁进行竞争获取,先获取到锁的线程禁止其他线程调用increase()方法。
对于同一个对象来说,只有一个锁,一旦被某个线程竞争获取到锁了,其他线程