计数 i++,++i 简单的线程安全与线程非安全的代码对比
来源:互联网 发布:虫虫群发软件 编辑:程序博客网 时间:2024/06/10 00:08
执行代码就可以看出来 i++,++i并非线程安全的import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;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() { 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++; }}
0 0
- 计数 i++,++i 简单的线程安全与线程非安全的代码对比
- AtomicInteger线程安全的i++
- JAVA i++线程非安全测试1
- PHP线程安全与非线程安全的区别
- PHP线程安全与非线程安全的区别
- 线程安全与非线程安全的区别
- PHP 线程安全与非线程安全版本的区别
- PHP非线程安全与线程安全版本的选择
- PHP线程安全与非线程安全的区别
- PHP的线程安全与非线程安全
- 线程安全非线程安全的区别
- 线程安全与可重入函数的对比
- Java线程安全和非线程安全(用代码证明Hashtab,Hashmap的线程安全问)
- 线程安全与非安全
- 非线程安全的函数
- 线程安全与非线程安全
- JAVA线程安全与非线程安全
- 线程安全与非线程安全
- 使用maven构建 ssm项目 tomcat7插件运行报错, Invalid byte tag in constant pool: 60
- jsp:bean与el表达式笔记
- 计算机图形学(八)几何图形变换讲解与源代码
- echarts图表显示问题
- Android面试题-与性能优化相关面试题三
- 计数 i++,++i 简单的线程安全与线程非安全的代码对比
- mac登陆时出现一个 其他
- 高性能MySQL(五)—创建高性能索引(2)
- U盘插入电脑提示格式化怎么办
- Java学习:Java 中的 static 使用之静态变量
- SSBC 安装 oursql碰到的问题 mysql-config not found
- Sticky footers 粘性页脚布局
- html,css题
- linux进程间的通信之管道通信