package chapter02;
import org.omg.CORBA.PRIVATE_MEMBER;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author etouch
* @create 2018-08-01 12:13
* @desc 基于CAS的线程安全的计数器和非线程安全的计数器
**/
public class Counter {
private AtomicInteger atomicI = new AtomicInteger(0);
private int i = 0;
public static void main(String[] args) {
final Counter cas = new Counter();
List<Thread> ts = new ArrayList<Thread>(600);
long start = System.currentTimeMillis();
for (int j = 0 ; j < 100 ; j++){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0 ; i < 10000; i ++){
cas.count();
cas.safeCount();
}
}
});
ts.add(t);
}
for (Thread t:ts){
t.start();
}
for (Thread t:ts){
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(cas.i);
System.out.println(cas.atomicI.get());
System.out.println(System.currentTimeMillis()-start);
}
/**
* 使用CAS实现线程安全计数器
*/
private void safeCount() {
for (;;) {
int i = atomicI.get();
boolean suc = atomicI.compareAndSet(i, ++i);
if (suc) {
break;
}
}
}
/**
* 非线程安全计数器
*/
private void count() {
i++;
}
}
java编程艺术源代码
需积分: 1 55 浏览量
2023-11-17
21:09:58
上传
评论
收藏 5KB ZIP 举报
hakesashou
- 粉丝: 3852
- 资源: 901
最新资源
- Android源码新基线代码更新的方法
- 1_二级程序设计题(34).rar
- 二级程序调试题(填空27+改错7).docx
- HM2314-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于深度学习的危险驾驶检测算法python源码+视频判断是否闭眼或者张开嘴哈欠和吸烟打电话等手势行为功能涵盖7类.zip
- Free-Fs 开源文件管理系统
- HM2314B-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 毕业设计:Python高校学生学业预警系统(源码 + 数据库 + 说明文档)
- HM2312-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 毕业设计:Python的在线自主评测系统(源码 + 数据库 + 说明文档)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈