Java并发编程
lss0555
关注领域:JavaEE,Android,JavaScript
展开
-
Java并发编程初体验(一)
一.前言操作系统的出现使得计算机每次能运行多个运行程序,并且不同的程序都在单独的进程中运行;操作系统为各个独立执行的进程分配各种资源,包括内存、文件句柄以及安全证书等。如果需要的话,在不同的进程之间可以通过一些粗粒度的通信机制来交换数据,包括:套接字、信号处理器、共享内存、信号量以及文件等。之所以在计算机中加入操作系统来实现多个程序的同时执行,主要是基于以下原因:资源利用率:在某些情况下,程...原创 2018-11-14 11:41:55 · 219 阅读 · 0 评论 -
Java并发编程之可见性volatile (十一)
一.介绍synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是java虚拟机提供的最轻量级的同步机制。但它同时不容易被正确理解,也至于在并发编程中很多程序员遇到线程安全的问题就会使用synchronized。Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行...原创 2018-12-03 17:26:48 · 220 阅读 · 0 评论 -
Java并发编程之 lock (十)
一. 前言synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。二.Lock相关接口1.lockvoid lock();lock()方法是平常使...原创 2018-11-29 10:29:17 · 211 阅读 · 1 评论 -
Java并发编程之CountDownLatch(七)
一.介绍JDK1.5以前,使用并发操作,都是通过Thread,Runnable来操作多线程;但是在JDK1.5之后,提供了非常方便的线程池(ThreadExecutorPool),主要代码由大牛Doug Lea完成,因为实在太过于优秀,所以被加入到jdk之中。JDk1.5提供了一个非常有用的包,Concurrent包,这个包主要用来操作一些并发操作,提供一些并发类,可以方便在项目当中傻瓜式应用。...原创 2018-11-20 09:07:08 · 180 阅读 · 0 评论 -
Java并发编程之内存模型JMM(六)
一.并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通...原创 2018-11-19 15:35:15 · 171 阅读 · 0 评论 -
Java并发编程之原子性Synchronized(九)
一.前言线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一...原创 2018-11-22 09:58:13 · 399 阅读 · 0 评论 -
Java并发编程之CPU多级缓存与缓存一致性(五)
一.前言CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu->cache->memory)CPU cache有什么意义1)时间局部性:如果某个数据被访问,那么在不久的将来它很可能再次被访问2)空间局部性:如果某个数据被访问,那么与它相邻的数据很快也能被访问。...原创 2018-11-19 11:27:59 · 387 阅读 · 0 评论 -
Java并发编程之基本概念(四)
一.并发同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替的换入或者换出内存,这些线程是同时"存在"的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器上,因此可以同时运行.多个线程处理相同的资源,保证线程的安全,合理的使用资源.二.高并发高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系...原创 2018-11-16 10:52:14 · 158 阅读 · 0 评论 -
Java并发编程之原子性Atomic(八)
一.Atomic包简介Atomic包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型及引用类型)变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时,仅有一个线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。Atomic系列的类中的核心方法都会调用unsafe类中的几个本地方法。我们需要先知道一个东西就是Unsafe类,全名为...原创 2018-11-20 15:49:56 · 218 阅读 · 0 评论 -
Java并发编程之线程池(三)
一.介绍Java通过Executors提供四种线程池,分别为:(1)newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。(2)newFixedThreadPool: 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。(3)newScheduledThreadPool :创建一个定长线程池,支...原创 2018-11-14 17:17:49 · 158 阅读 · 0 评论 -
Java并发编程之Semaphore(二)
一.介绍Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施,也是操作系统中用于控制进程同步互斥的量。Semaphore是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。它相当于给线程规定一个量从而控制允许活动的线程数。二.工作原理Semaphore是计数信号量。Semaphore管理一系列许可证。每个acqui...原创 2018-11-14 15:49:42 · 230 阅读 · 0 评论 -
线程池中java.util.concurrent.RejectedExecutionException
前言昨晚12:00运行自动化测试脚本时遇到了java.util.concurrent.RejectedExecutionException这个异常,从异常名称里很容易分析出是提交的任务被线程池拒绝了。查看源码发现是在Activity里,AsyncTask是在自定义的线程池的运行的,但是onDestory函数里却是先显示调用了线程池的shutdown方法,然后才是AsyncTask的cancel操...转载 2018-12-06 08:55:51 · 932 阅读 · 0 评论