Java_并发基础
Simba_cheng
低调,低调
展开
-
并发基础_5_并发_ThreadLocal
ThreadLocal(线程本地存储)的使用ThreadLocal是什么?注意:ThreadLocal与线程同步无关,并不是为了解决多线程共享变量问题!ThreadLocal源码中的解释:大概意思是:ThreadLocal类用来提供线程内部的局部变量。这些变量在多线程环境下访问(通过get或set)时,能保证各个线程里的变量相对于独立于其他线程内原创 2017-06-23 21:56:47 · 546 阅读 · 0 评论 -
并发基础_14_并发_原子操作类
在多线程场景下,为了保证操作对象的安全性,通常使用synchronized来解决。在JDK1.5开始,提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一些简单安全高效的更新变量的方式。Atomic包中一共提供了13个类,Atomic包中的类基本都是使用Unsafe实现的包装类。所谓原子操作:一组不可分割的操作;操作者对目标对象进原创 2017-09-14 23:19:37 · 316 阅读 · 0 评论 -
并发基础_15_并发_线程池(ThreadPoolExecutor)
线程池Java中的线程池是运用场景最多的并发框架。合理使用线程池能带来三个好处:a. 降低资源消耗通过重复利用已创建的线程降低线程创建和销毁造成的消耗b. 提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行c. 提高线程的可管理性线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性。使用线程池可原创 2017-09-14 23:35:53 · 379 阅读 · 0 评论 -
并发基础_9_并发_锁_读写锁_未详解
读写锁 - ReentrantReadWriteLock读写锁简介之前一篇文章,学习了解了ReentrantLock重入锁,这篇介绍ReentrantReadWriteLock读写锁。从名字上看,这两个锁似乎存在某些联系?现实情况是这两个锁没有半毛钱的关系,就像 Java和JavaScript,socket和webSocket,雷峰塔和雷锋,没有关系..原创 2017-09-06 19:20:34 · 569 阅读 · 0 评论 -
并发基础_8_并发_锁_重入锁
重入锁重入锁ReentrantLock,是基于AbstractQueuedSynchronizer的,建议最好先将上一篇文章读一下..ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁;此外还支持获取锁时的公平性和非公平性选择。之前在写AbstractQueuedSynchronizer(队列同步器)的时候,原创 2017-09-06 18:11:32 · 280 阅读 · 0 评论 -
并发基础_7_并发_锁_队列同步器(AQS)
AbstractQueuedSynchronizer队列同步器(AQS)废话几句,看AQS之前,最好先了解下设计模式中的 -- "模板模式"这一节AQS,我花了挺多的时间去看的,看的有些云里雾里的,各位要是暂时看的头晕建议跳过去..这章我是硬着头皮看下来的,后面还得回炉...这个队列同步器啊,是Java并发包下的核心之一;这个基础框架有多重要呢?concurrent包下原创 2017-09-06 17:17:49 · 1570 阅读 · 1 评论 -
并发基础_13_并发_框架_Fork/Join
Fork/Join框架Fork/Join框架是Jdk1.7提供的一个用于并发执行任务的框架。它将一个大任务分割为若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork就是将一个大任务切分为若干个子任务并行的执行;Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。(如果你了解过Hadoop的MapReduce的话,会发现,和这个玩意很像原创 2017-09-13 21:42:01 · 335 阅读 · 0 评论 -
并发基础_12_并发_容器_阻塞队列
阻塞队列接口阻塞队列BlockingQueue接口是一个支持两个附加操作的队列。这两个附加操作支持阻塞的插入和阻塞的移除方法。a. 支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列有空余位置。b. 支持阻塞的移除方法:队列为空时,获取元素的线程会等待队列中有元素。阻塞队列常用于生产者与消费者的场景,生产者是向队列里添加元素的线程,消费者原创 2017-09-13 21:26:08 · 288 阅读 · 0 评论 -
并发基础_11_并发_容器_ConcurrentLinkedQueue
要实现一个线程安全的队列有两个方式:一种是使用阻塞算法,另一种是使用非阻塞算法。阻塞算法:使用阻塞算法的队列可以用一个锁(入队和出队同一把锁)或两把锁(入队和出队用不同的锁)来实现。非阻塞的实现方式则可以使用循环CAS的方式来实现。ConcurrentLinkedQueue非阻塞线程安全队列ConcurrentLinkedQueue是一个基于链接节点的无原创 2017-09-13 20:31:17 · 277 阅读 · 0 评论 -
并发基础_6_并发_锁
Java中的锁Lock接口锁是用来控制多个线程访问共享资源的,一般来说,锁能够防止多个线程同事访问共享资源(有些锁允许多线程并发访问共享资源,比如读写锁)在Lock接口出现之前,Java程序靠synchronized关键字实现锁的功能。在JavaSE5 之后,并发包中新增Lock接口用来实现锁功能,功能上讲与synchronized关键字类似;Lock需要在代码中显原创 2017-07-19 23:29:33 · 418 阅读 · 0 评论 -
并发基础_3_并发_线程
线程简介1. 什么是线程现代操作系统在运行一个程序时,会为其创建一个进程。现代操作系统调度的最小单元是线程,也叫轻量级进程。在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。2. 为什么使用多线程a. 更多的处理器核心书中讲了很多,提炼一下:合理使用多核处理器,不浪费多核处理器的性能。原创 2017-07-12 21:00:26 · 394 阅读 · 0 评论 -
并发基础_1_序
并发基础系列学习笔记是在阅读/学习《Java并发编程的艺术》一书的基础上,对书中的内容进行的一个小结。书中有的内容看上去比较苦涩难懂,在阅读学习的过程中,用自己习惯的方式,将其整理出来,分享给大家,同时也是给自己做知识储备我目前的工作中使用到并发技术不多..如果有错误的地方,还请指正...实际在翻阅这本书的时候,看前面1-3章都是并发的底层原理实现,看的比较累、甚至头疼。原创 2017-07-10 23:15:06 · 404 阅读 · 0 评论 -
并发基础_2_并发_Java内存模型
Java内存模型1. 并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:(这里的线程指的是并发执行的活动实体)a. 线程之间如何通信?在命令式编程中,线程之间的通信机制有两种:共享内存 和 消息传递b. 线程之间如何同步?在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之原创 2017-07-10 23:49:08 · 457 阅读 · 0 评论 -
并发基础_1_并发_底层实现
Java并发机制的底层应用Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM种,JVM执行字节码,最终需要转化为汇编指令在CPU上执行Volatile的应用volation是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性"。可见性的意思是 当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。1. V原创 2017-07-10 23:25:57 · 366 阅读 · 0 评论 -
并发基础_10_并发_容器_ConcurrentHashMap
ConcurrentHashMapHashMap多线程死循环Demo在之前HashMap的文章中提到,HashMap是非线程安全的。在多线程环境下使用HashMap的put操作会引发死循环,所以在并发/多线程情况下不能使用HashMap。我们看下面的这个Demopackage com.hashmap.hashmap_1;import java.util.Hash原创 2017-09-11 22:07:41 · 404 阅读 · 0 评论