Java 多线程系列

  要编写线程安全的代码,其核心在于要对状态访问操做进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问。html

  Java中的主要同步机制是关键字synchronized,它提供了一种独占的加锁方式,可是同步这个术语还包括volatiel类型的变量,显式锁(Explicit Lock)以及原子变量。 java

1.概念说明编程

  线程安全:当多个线程访问某个类时,无论运行时环境采用何种调度方式或者这些线程将如何交替执行,而且在主调代码中不须要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。安全

  原子操做:是指对于访问同一个状态的全部操做(包括该操做自己)来讲,这个操做是一个以原子方式执行的操做。多线程

  内存可见性(Memory Visibility):当一个线程修改了某个状态对象后,其它线程可以看到发生的状态变化并发

  要保持状态的一致性,就须要在单个原子操做中更新全部相关的状态变量。框架

2.同步说明post

  并不是全部的数据都须要锁的保护,只有被多个线程同时访问的可变变量才须要经过锁保护  url

  一种常见的加锁约定是:将全部的可变状态都封装在对象内部,并经过对象的内置锁对象对全部访问状态的代码路径进行同步,使得在该对象上不会发生并发访问。spa

  加锁的含义不单单局限于互斥行为,还包括内存可见性。为了确保全部线程都能看到共享变量的最新值,全部执行读操做或写操做的线程都必须在同一个锁上面同步。

3.几种同步的具体使用方法

  因为同步有几种实现方法,下面各篇分别介绍synchronized、volatile、显式锁和原子变量:

  java synchronized详解

  java volatile详解

4.线程池用法

  因为线程生命周期的开销很是高、资源消耗及稳定性,在线程多线程时候,应该先考虑使用线程池。

  线程池简化了线程的管理工做,而且java.util.concurrent提供了一种灵活的线程池实现做为Executor框架的一部分。

  并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,而后在提交给一个Executor执行,Executor.execute(Runnalbe) 。Executor在执行时使用内部的线程池完成操做

  Java 线程池

 

说明:

  该系列主要参考《Java 并发编程实战》以及平时在网上收集的一些内容,固然也加上了本身的一些理解和认识

相关文章
相关标签/搜索