Java创建线程安全的方法
来源:互联网 发布:重低音增强软件 编辑:程序博客网 时间:2024/06/07 03:54
首先来看一个问题:
下面这个方法是线程安全的吗?如何才能让这个方法变成线程安全的?
1
public
class
MyCount {
2
private
static
int
counter =
0
;
3
4
public
static
int
getCount(){
5
return
counter++;
6
}
7
}
首先,这个方法不是线程安全的,因为counter++操作不是一个原子性的操作,也就意味着counter++操作包含了好几个原子性的操作。实际上,counter++包含了三个原子性的操作,第一步是获取counter的值,第二步是对counter的值加1,第三步是写入的操作。在多线程环境对getCount()方法的调用,可能会出现下面的场景:
方法1:
对这个方法增加同步的控制,会让这个方法变成线程安全的。当给静态方法添加synchronized关键字修饰的时候,实际上锁定的是这个类所对应的Class对象。在JVM中,一个类只会存在一个Class对象。
代码示例如下:
1
public
class
MyCount {
2
private
static
int
counter =
0
;
3
4
public
static
synchronized
int
getCount(){
5
return
counter++;
6
}
7
}
如果这个方法不是静态的,那么给方法添加synchronized关键字修饰的时候,锁住的实际上是相应的实例对象,而不是这个类所对应的Class对象。
方法2:
在这个特殊的计数器的例子当中,实际上只要把counter++操作变成原子操作,就可以让这个方法变成是线程安全的方法。在jdk5的线程库,java.util.concurrent.atomic包中提供的AtomicInteger类可以满足我们的需求。
代码示例如下:
1
public
class
MyCount {
2
private
static
AtomicInteger counter =
new
AtomicInteger(
0
);
3
4
public
static
int
getCount(){
5
return
counter.getAndIncrement();
6
}
7
}
0 0
- Java创建线程安全的方法
- Java创建线程安全的方法
- Java创建线程安全的方法
- Java--java关闭线程的安全方法
- 创建安全的线程
- Java 线程的创建方法
- Java 创建线程的方法
- java 线程创建的方法
- Java线程的创建方法
- Java 创建线程的方法
- Java中创建单例模式的五种方法及线程安全
- Java 静态方法是线程安全的
- Java中安全终止线程的方法
- java中线程安全的实现方法
- Java线程安全的实现方法
- Java关闭线程的安全方法
- Java关闭线程的安全方法
- java 线程安全的3种方法
- 需要的拿去—Android手表和手机通讯研究
- java学习笔记之StringBuffer(一)
- UVALive 5070 Awkward Lights
- 画线的基本方法
- Nth Highest Salary
- Java创建线程安全的方法
- 杭电 1003
- MySQL慢查询整理
- weblogic生产模式,实现启动主控时不需要输入密码
- Found 4 versions of android-support-v4.jar in the dependency list.
- ArcEngine中使用IMap.FeatureSelection获取被选中的要素
- 基站选址
- Struts 2中实现文件下载(修正中文问题)
- 2015年 矿山生态工程及案例 课程PPT