Java创建线程安全的方法
来源:互联网 发布:响应式影视网站建设cms 编辑:程序博客网 时间:2024/05/23 14:36
首先来看一个问题:
下面这个方法是线程安全的吗?如何才能让这个方法变成线程安全的?
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
}
(全文完)如果您喜欢此文请点赞,分享,评论。
http://ifeve.com/how-to-make-a-method-thread-safe-in-java/
0 0
- Java创建线程安全的方法
- Java创建线程安全的方法
- Java创建线程安全的方法
- Java--java关闭线程的安全方法
- 创建安全的线程
- Java 线程的创建方法
- Java 创建线程的方法
- java 线程创建的方法
- Java线程的创建方法
- Java 创建线程的方法
- Java中创建单例模式的五种方法及线程安全
- Java 静态方法是线程安全的
- Java中安全终止线程的方法
- java中线程安全的实现方法
- Java线程安全的实现方法
- Java关闭线程的安全方法
- Java关闭线程的安全方法
- java 线程安全的3种方法
- leetcode 之 Flatten Binary Tree to Linked List
- android简单的九宫格解锁view
- fragments
- 动态库开发
- VMware NAT 端口映射
- Java创建线程安全的方法
- 数据库总结之触发器存储过程
- 查看 SELinux状态及关闭SELinux
- XDOJ 1209 - 破译电话号码
- class的大小分析
- OVS 发送OFPT_PORT_STATUS 过程
- 关闭SourceInsight的大括号自动缩进
- 字符串对象(2)
- hdu 3836 Equivalent Sets hdu 2767 Proving Equivalences 强连通缩点入门