zoukankan      html  css  js  c++  java
  • Java 多线程系列

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

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

    1.概念说明

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

      原子操作:是指对于访问同一个状态的所有操作(包括该操作本身)来说,这个操作是一个以原子方式执行的操作。

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

      要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。

    2.同步说明

      并非所有的数据都需要锁的保护,只有被多个线程同时访问的可变变量才需要通过锁保护  

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

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

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

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

      java synchronized详解

      java volatile详解

    4.线程池用法

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

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

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

      Java 线程池

     

    说明:

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

  • 相关阅读:
    mkdir,rmdir
    linux目录结构
    echo
    date
    man
    cd
    ls
    线程、进程
    php类型的自动转换
    电商
  • 原文地址:https://www.cnblogs.com/adm1989/p/3293148.html
Copyright © 2011-2022 走看看