你的位置:首页 > 软件开发 > Java > Java 并发编程:核心理论

Java 并发编程:核心理论

发布时间:2016-04-12 08:00:25
并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)、Synch ...

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++;  }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Java 并发编程:核心理论

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。