java并发数据共享机制_Java并发编程:核心理论之数据共享性
原标题:Java并发编程:核心理论之数据共享性
并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。在此基础上,我们会进一步分析java.util.concurrent包的工具类,包括其使用方式、实现源码及其背后的原理。本文是该系列的第一篇文章,是这系列中最核心的理论部分,之后的文章都会以此为基础来分析和解释。
一、共享性
数据共享性是线程安全的主要原因之一。如果所有的数据只是在线程内有效,那就不存在线程安全性问题,这也是我们在编程的时候经常不需要考虑线程安全的主要原因之一。但是,在多线程编程中,数据共享是不可避免的。最典型的场景是数据库中的数据,为了保证数据的一致性,我们通常需要共享同一个数据库中数据,即使是在主从的情况下,访问的也同一份数据,主从只是为了访问的效率和数据安全,而对同一份数据做的副本。我们现在,通过一个简单的示例来演示多线程下共享数据导致的问题:
代码段一:
package com.paddx.test.concurrent;
public class ShareData {
public static int count = 0;
public static void main(String[] args) {
final ShareData data = new ShareData();
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
//进入的时候暂停1毫秒,增加并发问题出现的几率
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int j = 0; j < 100; j++) {
data.addCount();
}
System.out.print(count + " ");
}
}).start();
}
try {
//主程序暂停3秒,以保证上面的程序执行完成
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("count=" + count);
}
public void addCount() {
count++;
}
}
上述代码的目的是对count进行加一操作,执行1000次,不过这里是通过10个线程来实现的,每个线程执行100次,正常情况下,应该输出1000.不过,如果你运行上面的程序,你会发现结果却不是这样。下面是某次的执行结果(每次运行的结果不一定相同,有时候也可能获取到正确的结果):
可以看出,对共享变量操作,在多线程环境下很容易出现各种意想不到的的结果。
来源:http://www.cnblogs.com/paddix/p/5374810.html
责任编辑:
java并发数据共享机制_Java并发编程:核心理论之数据共享性相关推荐
- Java 并发编程—核心理论
原文作者:liuxiaopeng 原文地址:Java 并发编程:核心理论 目录 一.共享性 二.互斥性 三.原子性 四.可见性 五.有序性 六 总结 并发编程是Java程序员最重要的技能之一,也是最难 ...
- java的多线程机制_Java多线程开发(一)| 基本的线程机制
0. 前言 Java 为了实现跨平台,在语言层面上实现了多线程.我们只需要熟悉 Java 这一套多线程机制就行了,比 C/C++ 要容易多了. 1. 定义任务 我们编写程序,最终是为了完成特定的任务. ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
- 说一下java的运行机制_Java运行机制是什么?
不管是学习Java还是其他什么变成语言,我们不仅要了解它的特性,充分的使用Java语言完成各种程序开发工作,还要了解Java的运行机制.只有了解其底层的运行机制,才能更好的利用Java完成各项工作.J ...
- java程序并行机制_Java语言具有多种优点和特点,下列选项中,______反映了Java程序并行执行机制的特点。A.多线程B.健...
Java语言具有多种优点和特点,下列选项中,______反映了Java程序并行执行机制的特点.A.多线程B.健 更多相关问题 根据句意及首字母完成单词1. -What c__________ is i ...
- java final内存机制_Java中的内存处理机制和final、static、final static总结
装载自:http://blog.csdn.net/wqthaha/article/details/20923579 Java程序运行在JVM上,可以把JVM理解成Java程序和操作系统之间的桥梁,JV ...
- java的响应机制_JAVA事件响应机制
JAVA事件响应机制 1,先自定义一个事件 public class MyEvent extends java.util.EventObject{ public MyEvent(Object sour ...
- java tcp 心跳机制_Java实现心跳机制的方法
一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...
- java 服务器 http请求_Java网络编程——发送HTTP请求到服务器
当Java程序需要向服务器发送请求或读取服务器数据时,使用URLConnection类是比较好的选择.URLConnection类封装了与服务器互动操作的方法,通过它可以建立与服务器的远程连接,检查服 ...
最新文章
- 工作中使用计算机的经验,事业单位考试中计算机工作经历是什么意思
- python如何对人数向上取整_python中的向上取整向下取整以及四舍五入的方法
- web.xml 中的filter
- Mac下ssh支持auto complete
- try-catch-finally的返回值问题
- linux找不到mysql服务_linux mysql 找不到 mysql/mysql.h
- 浪曦视频在线的ASP.NET AJAX视频教程下载(转载)
- 数据分析--优化模型
- vim中替换字符串的方法有哪些
- 网上车市通过聆讯:营收单一,上半年减员15%,徐翀持股80%
- android 验证手机、邮箱格式
- 浅谈“异常信息泄露(应用程序错误)”
- Android JSON:Gson,FastJson解析库的使用和对比分析(1)
- 微信撤回消息在服务器可以看到吗,微信撤回消息可以查看了,对方撤回了什么一目了然...
- usc week 5 计算几何(包含凸包) 队内练习题
- 【计算机网络】6. 网络基础4之详解IP协议( IP协议头格式、IP地址管理、路由选择)
- 刷题的目的及注意事项
- 分支语句和循环语句<小罗爱学c语言>
- 农业信息化技术与应用案例test
- 软件著作权申请注意事项——计算机软件著作权登记申请(R11申请)流程
热门文章
- matlab 图像坐标系
- 批量修改数据_#泰Q头条#065期 四步搞定Excel表中的批量数据修改
- MATLAB集合运算
- AUTOSAR专业知识篇(八)-大众ID.4 X网络架构详解
- 对着爬虫网页HTML学习Python正则表达式re
- 少儿编程100讲轻松学python(十二)-python如何将数据写入txt
- 街机linux有安卓好吗,Ubuntu下用xmame玩街机游戏
- 把ipa文件上传到服务器,windows电脑上传ipa到appstore的详细流程
- key value vue 输出_vue注意事项总结(一)
- 小程序在wxml页面中取整