volatile非原子性的示例
volatile非原子性的示例
package com.stono.thread2.page124;
public class MyThread extends Thread {
volatile public static int count;
private static void addCount() {
for(int i=0;i<100;i++) {
count++;
}
System.out.println("count = "+count);
}
@Override
public void run() {
addCount();
}
}
package com.stono.thread2.page124;
public class Run {
public static void main(String[] args) {
MyThread [] myThreads = new MyThread[100];
for(int i=0;i<100;i++) {
myThreads[i] = new MyThread();
}
for(int i=0;i<100;i++) {
myThreads[i].start();
}
}
}
对于count变量,存在非线程安全的问题,多个线程同时对count进行++操作,最后导致count的结果不是10000;
示例来源于《Java多线程编程核心技术》- 高洪岩著 Page 124
volatile非原子性的示例的更多相关文章
- volatile非原子性示例
volatile非原子性示例 学习了:<Java多线程编程核心技术>高洪岩 著 Page124 package com.stono.thread2.page124_2; public cl ...
- 深入理解Atomic原子操作和volatile非原子性
原子操作可以理解为: 一个数,很多线程去同时修改它,不加sync同步锁,就可以保证修改结果是正确的 Atomic正是采用了CAS算法,所以可以在多线程环境下安全地操作对象. volatile是Java ...
- 编写安全代码:小心volatile的原子性误解
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途. ============ ...
- 多线程(四)~数据操作的原子性,使用原子性操作AutomicInteger替换非原子性的i++的操作
这一章,我们要来验证volatile关键字不是原子性的,OK,还是用代码来说话. ①.线程类,操作i++ 500次 package com.multiThread.thread; publicclas ...
- Java并发编程的艺术(二)——volatile、原子性
什么是volatile Java语言允许线程访问共享变量,为了确保共享变量能够被准确一致地更新,如果一个字段被声明为volatile,那么Java内存模型将会确保所有线程看到这个变量时值是一致的.保证 ...
- linux-socket connect阻塞和非阻塞模式 示例
~/cpp$ ./connect 192.168.1.234 1234 kkkk block mode: ubuntu 14.04 : time used:21.0.001053s connect ...
- Java Thread系列(六)volatile
Java Thread系列(六)volatile volatile 关键字具备可见性,不具备原子性.主要作用是使变量在多个线程间可见.但不具备原子性(同步性),可以算一个轻量级的 synchroniz ...
- java多线程之volatile关键字
public class ThreadVolatile extends Thread { public boolean flag=true; @Override public void run() { ...
- Java多线程与并发编程学习
一.线程三大特性 多线程有三大特性,原子性.可见性.有序性 1.1 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行.一个很经典的例子就是银行账户转账 ...
随机推荐
- C/C++常用头文件 以及简单应用介绍
C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> ...
- Codeforces 455D 分块+链表
题意: 给定一个长度为 N 的序列两种操作1 l r 将[l,r]的数向右循环移位 2 l r 询问[l,r]内有多少个数等于 k其中 N,Q≤105,ai≤N 强制在线 思路: 1. 每块用一个链表 ...
- day03_12/13/2016_bean的管理之依赖注入
- 跨服务器进行SQL Server数据库的数据处理
exec sp_addlinkedserver 'ITDB', ' ', 'SQLOLEDB', '服务器IP' exec sp_addlinkedsrvlogin 'ITDB', 'false ', ...
- Java常用类库(一) : Object 和日期类的简单使用
顶哥说:Java是世界的,但项目不是! Java有非常多的类库,而我们不会也不用都去学习,毕竟你也仅仅掌握了你手机20%的功能却足够你使用,不是吗? 今天介绍以下类: l Object l Dat ...
- PB连接SQLITE
sqlite3数据库,简单而功能强大,比起ini文件保存用户设置,更简单安全,为什么使用数据库存用户设置,由开发者自己去想吧进入话题:pb中可以用ole DB方式在不注册odbc的情况下直接连接数据库 ...
- iframe监听unload事件
阻止默认事件 event.preventDefault(); 阻止事件冒泡 event.stopPropagation(); event.cancelBubble = true; //IE <a ...
- 【译】x86程序员手册15-5.2页转换
5.2 Page Translation 页转换 In the second phase of address transformation, the 80386 transforms a linea ...
- Windows 8 常见教程
http://www.codeproject.com/Articles/439874/Web-service-on-Windows-Phone http://www.c-sharpcorner.com ...
- Mirror用法
switch (quadrantType) { case QuadrantType.one: db.setlayerCenter(); ids.Add(db.AddToModelSpace(arc)) ...