java 并发 变量_实例讲解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 并发 变量_实例讲解Java并发编程之变量相关推荐
- java console 交互_实例讲解java中Console类的用法
java的Console类的使用方法及实例 java的Console类的使用方法及实例 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Win ...
- java自旋锁使用_实例讲解Java 自旋锁
一直以来不是怎么清楚自旋锁,最近有点时间,好好的学习了一下: 所谓的自旋锁在我的理解就是多个线程在尝试获取锁的时候,其中一个线程获取锁之后,其他的线程都处在一直尝试获取锁的状态,不会阻塞!!!那么什么 ...
- python 西门子触摸屏通讯_实例讲解博途编程实现S7300与西门子触摸屏通讯
原标题:实例讲解博途编程实现S7300与西门子触摸屏通讯 目前国内流行用昆仑通泰或者威纶通触摸屏做项目,一方面价格便宜,另一方面编程简单.但西门子屏也经常会被用到,所以不得不学.简单写一下会用博图建立 ...
- java 状态设计模式_实例讲解:Java中的状态设计模式
Java中的状态设计模式是一种软件设计模式,当对象的内部状态更改时,该模式允许对象更改其行为.状态设计模式通常用于以下情况:对象取决于其状态,并且在运行期间必须根据其内部状态更改其行为.状态设计模式是 ...
- java斗地主代码_实例解析java如何实现斗地主代码
实例解析java如何实现斗地主代码 发布时间:2020-07-20 14:41:41 来源:亿速云 阅读:73 作者:小猪 小编这次要给大家分享的是实例解析java如何实现斗地主代码,文章内容丰富,感 ...
- java 字符串驻留_实例讲解字符串驻留机制
字符串驻留是一种仅保存一份相同且不可变字符串的方法.字符串驻留机制,其实就是系统维护interned字典,记录已被驻留的字符串对象. 下面我们通过实际例子探讨字符串驻留机制: Code Snip: s ...
- java pdf添加图章_实例讲解Java处理PDF图章的方法
图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门机关权威的重要指示物,常见于各种格式的文件.文档中.对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现.本篇文档分享通过 ...
- java 字节 操作_实例解析Java byte数组操纵方式代码
字节数组的关键在于它为存储在该部分内存中的每个8位值提供索引(快速),精确的原始访问,并且您可以对这些字节进行操作以控制每个位. 坏处是计算机只将每个条目视为一个独立的8位数 - 这可能是你的程序正在 ...
- python积木式编程_实例讲解python函数式编程
函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...
最新文章
- 24个为Web开发人员准备的CSS3实用教程
- [小技巧]在NTFS分区中复制文件的同时如何复制权限
- 文本编辑器实现光标定位的功能
- 关闭页面刷新上层页面的几种方式
- 浅谈 翻硬币游戏【Nim博弈】
- Vue表单类的父子组件数据传递示例_vue.js_脚本之家
- 关于mysql-connector-net在C#中的用法
- java项目开发的生命周期
- 初识Vocaloid3
- 【转载】电信光猫中兴F451破解方法
- 微信公众号问题:{errcode:40125,errmsg:invalid appsecret, view more at http:\/\/t.cn\/LOEdzVq, hints: [ ...
- 二元分类(Binary Classfication)与logistic回归
- Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer
- 企鹅,大鱼,百家,头条到底那个收益高,新手该怎么来做?
- 怎样把电脑默认安装C盘的位置改成D盘?
- 如何打开已经 force-push 的 PR (branch was force-pushed or recreated)
- 如何实现 List 集合去重?
- 信息安全等级保护分为几个级别?最高级别是什么?
- CVE-2022-0185 价值$3w的 File System Context 内核整数溢出漏洞利用分析
- CentOS7内网使用rpm方式安装MySQL5.6数据库
热门文章
- python获取文件名不含后缀名_大部分Python资料都没有说到的重点-用实战教你解决问题的思路...
- [转载] JAVA 构造函数及其重载
- dbms系统 rdbms_DBMS与传统文件系统之间的区别
- python 使用异常函数_您如何测试Python函数引发异常?
- python 示例_带有示例的Python File read()方法
- html木桶布局,CSS3如何实现图片木桶布局?(附代码)
- python字典怎么设置_在python中设置字典中的属性
- micropython 蜂鸣器_基于MicroPython的TPYBoard微信远程可燃气体报警器的设计与实现...
- mysql 指定数字排序_Mysql数据排序
- Java PrintWriter close()方法与示例