
Java多线程系列
代码有毒 mrcode
不断学习并记录笔记,http://mrcode.cn/ 我的 GitHub:https://github.com/zq99299
展开
-
Java多线程系列--“基础篇”11之 生产消费者问题
概要本章,会对“生产/消费者问题”进行讨论。1. 生产/消费者模型 生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”、“消费者”、“仓库”和“产品”。他们之间的关系如下:生产者仅仅在仓储未满时候生产,仓满则停止生产。消费者仅仅在仓储有产品时候才能消费,仓空则等待。当消费者发现仓储没产品可消费时候会通知生产者生产。生产者在生产出可消费产品时候,应该通知等待的消费者去消费。转载 2015-06-02 12:00:37 · 772 阅读 · 0 评论 -
Java多线程系列--“JUC锁”05之 非公平锁
Java多线程系列-目录概要前面两章分析了”公平锁的获取和释放机制”,这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析。参考代码下面给出Java1.7.0_40版本中,ReentrantLock和AQS的源码,仅供参考!ReentranLock.java/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.转载 2015-08-12 11:16:51 · 859 阅读 · 0 评论 -
Java多线程系列--“JUC锁”03之 公平锁(一)
Java多线程系列-目录概要本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁)基本概念本章,我们会讲解“线程获取公平锁”的原理;在讲解之前,需要了解几个基本概念。后面的内容,都是基于这些概念的;这些概念可能比较枯燥,但从这些概念中,能窥见“java锁”的一些架构,这对我们了解锁是有帮助的。AQS – 指AbstractQueuedSynchronizer类。 AQS是jav转载 2015-08-10 15:18:34 · 1954 阅读 · 0 评论 -
Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
概要本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍ReentrantLock介绍ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。 ReentrantLock分为“公平锁”和“非公转载 2015-07-30 16:44:49 · 740 阅读 · 0 评论 -
Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater原子类
Java多线程系列-目录概要AtomicIntegerFieldUpdater, AtomicLongFieldUpdater和AtomicReferenceFieldUpdater这3个修改类的成员的原子类型的原理和用法相似。本章以对基本类型的原子类进行介绍。AtomicLongFieldUpdater介绍和函数列表AtomicLongFieldUpdater可以对指定”类的 ‘volatile转载 2015-06-10 16:37:12 · 751 阅读 · 0 评论 -
Java多线程系列--“JUC原子类”04之 AtomicReference原子类
Java多线程系列-目录概要本章对AtomicReference引用类型的原子类进行介绍。AtomicReference介绍和函数列表AtomicReference是作用是对”对象”进行原子操作。AtomicReference函数列表// 使用 null 初始值创建新的 AtomicReference。AtomicReference()// 使用给定的初始值创建新的 AtomicReferenc转载 2015-06-10 15:28:15 · 717 阅读 · 0 评论 -
Java多线程系列--“JUC原子类”01之 框架
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。基本类型: AtomicInteger,AtomicLong, AtomicBoolean ;数组类型: AtomicIntegerArray, AtomicLongArray,AtomicReferenceArray ;引用类型: AtomicReference, AtomicStampedRerence, AtomicMarka转载 2015-06-02 13:02:42 · 621 阅读 · 0 评论 -
Java多线程系列--“JUC锁”04之 公平锁(二)
Java多线程系列-目录概要前面一章,我们学习了“公平锁”获取锁的详细流程;这里,我们再来看看“公平锁”释放锁的过程。参考代码下面给出Java1.7.0_40版本中,ReentrantLock和AQS的源码,仅供参考!ReentranLock.java/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *转载 2015-08-10 15:33:03 · 1204 阅读 · 0 评论 -
Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类
Java多线程系列-目录概要AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似。本章以AtomicLongArray对数组类型的原子类进行介绍.AtomicLongArray介绍和函数列表在”Java多线程系列–“JUC原子类”02之 AtomicLong原子类“中介绍过,AtomicLong是作用转载 2015-06-10 14:37:18 · 763 阅读 · 0 评论 -
Java多线程系列--“JUC锁”07之 LockSupport
概述本章介绍JUC(java.util.concurrent)包中的LockSupport。LockSupport介绍LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend 和 Thread.resume所可能引发的转载 2015-08-12 16:16:57 · 847 阅读 · 0 评论 -
Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
Java多线程系列-目录 [笔记][Java7并发编程实战手册]系列目录概要Java的JUC(java.util.concurrent)包中的锁包括”独占锁”和”共享锁”。 在“Java多线程系列–“JUC锁”02之 互斥锁ReentrantLock ”中,对Java的独占锁进行了说明。 本章对Java的“共享锁”进行介绍,JUC中的共享锁有CountDownLatch, CyclicBar转载 2015-08-13 14:01:24 · 1207 阅读 · 0 评论 -
Java多线程系列--“JUC锁”06之 Condition条件
Java多线程系列-目录 [笔记][Java7并发编程实战手册]系列目录概要前面对JUC包中的锁的原理进行了介绍,本章会JUC中对与锁经常配合使用的Condition进行介绍Condition介绍Condition的作用是对锁进行更精确的控制。 Condition中的await()方法相当于Object的wait()方法, Condition中的signal()方法相当于Object的noti转载 2015-08-12 15:03:48 · 702 阅读 · 0 评论 -
Java多线程系列--“JUC原子类”02之 AtomicLong原子类
概要AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似。本章以AtomicLong对基本类型的原子类进行介绍1. AtomicLong介绍和函数列表2. AtomicLong源码分析(基于JDK1.7.0_40)3 .AtomicLong示例本文From:http://www.cnblogs.com/skywang12345/p/35转载 2015-06-02 13:05:35 · 955 阅读 · 0 评论 -
Java多线程系列--“JUC锁”01之 框架
Java多线程系列-目录概要本章,我们介绍锁的架构;后面的章节将会对它们逐个进行分析介绍。同步锁 即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。 同步锁的原理是,对于每一个对象,有且仅有一个同步锁;不同的线程能共同访问该同步锁。但是,在同一个时间点,该同步锁能且只能被一个线程获取到。这样,获取到同步锁的线程就能进行CPU调转载 2015-06-11 11:38:39 · 1126 阅读 · 0 评论 -
Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable。 之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程。关于线程池的内容,我们以后会详细介绍;现在,先对的Thread和Runnable进行了解。Thread和Runnable简介Runnable 是一个接口,该接口中只包含了一个run()方法。它的定转载 2015-05-21 10:50:39 · 609 阅读 · 0 评论 -
Java多线程系列--“基础篇”04之 synchronized关键字
概要本章,会对synchronized关键字进行介绍。1. synchronized原理在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。 例如,synchronized(obj)就获取了“obj这个对象”的同步锁。 不同线程对同步锁的访问是互斥的。 也就是说,某时间点,对象转载 2015-05-21 13:26:28 · 701 阅读 · 0 评论 -
Java多线程系列--“基础篇”08之 join()
概要本章,会对Thread中join()方法进行介绍1. join()介绍 join() 定义在Thread.java中。 join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。这句话可能有点晦涩,我们还是通过例子去理解:// 主线程public class Father extends Thread { public void run() { So转载 2015-05-22 13:30:39 · 593 阅读 · 0 评论 -
Java多线程系列--“基础篇”06之 线程让步
概要本章,会对Thread中的线程让步方法yield()进行介绍1. yield()介绍 yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行! 2. yield()示例示例// Yi转载 2015-05-22 11:03:36 · 667 阅读 · 0 评论 -
Java多线程系列--“基础篇”10之 线程优先级和守护线程
Java多线程系列-目录概要本章,会对守护线程和线程优先级进行介绍。1. 线程优先级的介绍 java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。 java 中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。 用户线程一般用户执行用户级任务,转载 2015-06-02 10:50:55 · 737 阅读 · 0 评论 -
Java多线程系列--“基础篇”05之 线程等待与唤醒
概要本章,会对线程等待/唤醒方法进行介绍。1. wait(), notify(), notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口。 wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。 而notify()和notifyAll()的作用,则是唤醒当前对象上的等待转载 2015-05-22 09:26:07 · 1056 阅读 · 0 评论 -
Java多线程系列--“基础篇”07之 线程休眠
概要本章,会对Thread中sleep()方法进行介绍.1. sleep()介绍 sleep() 定义在Thread.java中。 sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。2. sleep(转载 2015-05-22 13:21:17 · 644 阅读 · 0 评论 -
Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答。start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。 run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!下面以代码来转载 2015-05-21 11:38:33 · 613 阅读 · 0 评论 -
Java多线程系列--“基础篇”01之 基本概念
多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thread类中的接口;synchronized关键字。注:JUC包是指,Java.util.concurrent包,它是由Java大师Doug Lea完成并在JDK1.5转载 2015-05-21 09:54:06 · 775 阅读 · 0 评论 -
Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
Java多线程系列-目录概要本章,会对线程的interrupt()中断和终止方式进行介绍。1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态”的线程4. interrupted() 和 isInterrupted()的区别本文From:http://www.cnblogs.com/skywang12345/p/3479949.html转载 2015-05-22 15:13:50 · 659 阅读 · 0 评论 -
Java多线程系列-目录
(一) 基础篇 01. Java多线程系列–“基础篇”01之 基本概念 02. Java多线程系列–“基础篇”02之 常用的实现多线程的两种方式 03. Java多线程系列–“基础篇”03之 Thread中start()和run()的区(文章末尾有疑问,如有知道的请解惑) 04. Java多线程系列–“基础篇”04之 synchronized关键字 05. Java多线程系列–“基础篇”0转载 2015-05-22 10:58:02 · 1266 阅读 · 0 评论