public class Count {
private static int counter = 0 ;
public static int getCount(){
// 非线程安全
return counter++;
}
}
- 第一种(不推荐,功力不够,用错会达不到同步效果)synchronized正确用法
public class Count {
private static int counter = 0 ;
public static synchronized int getCount(){
// 线程安全,但是synchronized加在方法上会锁住整个Count对象
return counter++;
}
}
- 第二种
public class Count {
private static int counter = 0 ;
public static int getCount(){
// 线程安全,不会锁住整个Count对象
synchronized(Count.class){
return counter++;
}
}
}
- 第三种(优先选择)
public class Count {
private static AtomicInteger counter = new AtomicInteger(0);
public static int getCount(){
// 线程安全,以原子方式将当前值加1,注意:这里返回的是自增前的值。
return counter.getAndIncrement();
}
}
参考: