线程同步
线程同步用来解决线程安全的问题。通常使用枷锁的方式,每次只允许一个线程加锁,加锁后才能进入访问,访问完毕后自动解锁,然后其他线程才能再加锁进来。
方式一:同步代码块
public class A{
实例方法:
public void xxx(){
...
synchronized(this){
...
}
}
静态方法:
public static void xxx(){
...
synchronized(A.class){
...
}
}
}
方式二:同步方法
public synchronized void xxx(){
...
}
注:同步代码块和同步方法的比较:范围上同步代码块的范围更小,同步方法锁的范围更大,所以同步代码块性能更好;可读性上同步方法更好。
方式三:Lock锁
public class A{
private final Lock lock = new ReentrantLock();
public void xxx(){
...
try(){
// 加锁
lock.lock();
...
} catch (Exception e){
...
} finally{
// 解锁
lock.unlock();
}
}
}