东莞微网站建设,wordpress inherit,网站产品介绍页面的布局方案,成都网站建设v原标题#xff1a;Java并发编程#xff1a;核心理论之数据共享性并发编程是Java程序员最重要的技能之一#xff0c;也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解#xff0c;同时要求编程者逻辑清晰、思维缜密#xff0c;这样才能写出高效、…原标题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() {Overridepublic 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责任编辑