实例讲解Java并发编程之变量
时间:2020-10-19 10:22:42|栏目:JAVA代码|点击: 次
编写线程安全需要关心的:
1.共享的变量
2.可变的变量
共享意味着多个线程可以同时访问,可变意味着其值在生命周期可以改变。
例如以下count 变量:
复制代码 代码如下:
//线程不安全的类
public class UnsafeCount {
private int count = 0; //该变量是共享的
public void increase() { //这里没有同步机制,多个线程可以同时访问
count++; //该变量是可变的
}
public int getCount() {
return count;
}
}
有4种方式可以修复这个问题:
1.不在线程中共享该状态变量,可以将变量封装到方法中(无状态的对象一定是线程安全的);因为方法中变量是每个线程独占的,不和其它线程共享。比如:
复制代码 代码如下:
public int add(int count){
return ++count;//这里也可以说无状态的对象一定是线程安全的
}
2.将状态变量修改为不可变的变量。
复制代码 代码如下:
private final int count = 0;
3.在访问状态变量使用同步策略。
复制代码 代码如下:
public synchronized void increase() {
count++;
}
4.使用原子变量类。
复制代码 代码如下:
private AtomicInteger count;
public void increase() {
count.getAndAdd(1);
}
上一篇:java 压缩和解压缩Zip、Jar、Gzip文件实例代码
栏 目:JAVA代码
下一篇:解析Java线程编程中的线程安全与synchronized的使用
本文标题:实例讲解Java并发编程之变量
本文地址:http://www.codeinn.net/misctech/13546.html
阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机