synchronized 关键字的介绍
synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。例如每个线程表示一个窗口出售一张票,那么用了这个关键字之后全世界在同一时刻只有一个人在进行买票操作。
synchronized关键字最主要的三种使用方式
1、修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁
public class SynchronizedDemo1 {
public synchronized void method() {
System.out.println("synchronized 方法");
}
}
2、修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 。
public class SSynchronizedDemo2{
public static synchronized void method(){
System.out.println("synchronized 静态方法");
}
}
3、修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
public class SynchronizedDemo3 {
public void method() {
synchronized (this) {
System.out.println("synchronized 代码块");
}
}
}
(特别注意:尽量不要使用 synchronized(String a) 因为JVM中,字符串常量池具有缓冲功能。