java多线程
文章平均质量分 88
介绍java多线程编程
通凡
这个作者很懒,什么都没留下…
展开
-
java8中对ConcurrentHashMap的改进
一、简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示:每一个segment都是一个HashEntry[] table, table中的每一个元素本质上都是一个HashEntry的单向队列。比如table[3]为首节点,table[3]->next为节点1,之后为节点2,依次类转载 2016-07-30 18:07:57 · 10000 阅读 · 0 评论 -
java多线程--condition条件
概要前面对JUC包中的锁的原理进行了介绍,本章会JUC中对与锁经常配合使用的Condition进行介绍,内容包括:Condition介绍Condition函数列表Condition示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496716.html Condition介绍Condition的作用是对锁进行更精确的控原创 2016-07-24 20:56:54 · 3453 阅读 · 3 评论 -
java多线程--公平锁(四)
释放公平锁(基于JDK1.7.0_40)1. unlock()unlock()在ReentrantLock.java中实现的,源码如下:public void unlock() { sync.release(1);}说明:unlock()是解锁函数,它是通过AQS的release()函数来实现的。在这里,“1”的含义和“获取锁的函数acquire(1)的含转载 2016-07-01 18:51:41 · 643 阅读 · 0 评论 -
java多线程--公平锁(三)
获取公平锁(基于JDK1.7.0_40)通过前面“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock”的“示例1”,我们知道,获取锁是通过lock()函数。下面,我们以lock()对获取公平锁的过程进行展开。1. lock()lock()在ReentrantLock.java的FairSync类中实现,它的源码如下:final void lock()转载 2016-07-01 15:31:35 · 4308 阅读 · 0 评论 -
java多线程--公平锁(二)
/*AQS(AbstractQueuedSynchronizer.java) * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group转载 2016-07-01 11:22:33 · 1143 阅读 · 0 评论 -
java多线程--公平锁(一)
基本概念本章,我们会讲解“线程获取公平锁”的原理;在讲解之前,需要了解几个基本概念。后面的内容,都是基于这些概念的;这些概念可能比较枯燥,但从这些概念中,能窥见“java锁”的一些架构,这对我们了解锁是有帮助的。1. AQS -- 指AbstractQueuedSynchronizer类。 AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是独占锁(转载 2016-07-01 11:17:09 · 1795 阅读 · 0 评论 -
java多线程--“升级版”生产者消费者
ReentrantLock介绍ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。ReentrantLock分为“公平锁”和“非公平锁”。它们的区别体现在获取锁的机制上是否公平。“锁”是为了保护竞争资源,防止多个线程同时操作线转载 2016-07-01 10:48:44 · 2408 阅读 · 0 评论 -
java多线程--“锁”总览
根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁"。同步锁 即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。 同步锁的原理是,对于每一个对象,有且仅有一个同步锁;不同的线程能共同访问该同步锁。但是,在同一个时间点,该同步锁能且只能被一个线程获取到。这样,获取到同步锁的线程就能转载 2016-07-01 10:33:08 · 2276 阅读 · 1 评论 -
java多线程--AtomicLongFieldUpdater
AtomicLongFieldUpdater介绍AtomicLongFieldUpdater可以对指定"类的 'volatile long'类型的成员"进行原子更新。它是基于反射原理实现的。 AtomicLongFieldUpdater示例// LongTest.java的源码import java.util.concurrent.atomic.AtomicLongField转载 2016-07-01 10:05:41 · 2320 阅读 · 0 评论 -
java多线程--AtomicReference
AtomicReference介绍AtomicReference是作用是对"对象"进行原子操作。AtomicReference源码分析(基于JDK1.7.0_40)在JDK1.7.0_40中AtomicReference.java的源码如下:public class AtomicReference implements java.io.Serializable { p转载 2016-06-24 10:20:57 · 15630 阅读 · 2 评论 -
java多线程--AtomicLongArray
AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似。本章以AtomicLongArray对数组类型的原子类进行介绍。AtomicLongArray的作用则是对"长整形数组"进行原子操作。AtomicLongArray源码分析(基于JDK1.7.0_40)AtomicLongArra转载 2016-06-24 09:52:06 · 1529 阅读 · 0 评论 -
java多线程--原子类
java1.8中的原子操作的类在包java.util.concurrent.atomic下面,全部包括如下:AtomicBooleanAtomicIntegerAtomicIntegerArrayAtomicIntegerFieldUpdaterAtomicLongAtomicLongArrayAtomicLongFieldUpdaterAtomicMarkableReferenceA转载 2016-06-23 16:47:59 · 2565 阅读 · 0 评论 -
java多线程--AtomicLong和LongAdder
AtomicLong简要介绍AtomicLong是作用是对长整形进行原子操作,显而易见,在java1.8中新加入了一个新的原子类LongAdder,该类也可以保证Long类型操作的原子性,相对于AtomicLong,LongAdder有着更高的性能和更好的表现,可以完全替代AtomicLong的来进行原子操作。在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两转载 2016-06-23 18:23:59 · 6180 阅读 · 0 评论 -
java多线程--“朴素版”生产者消费者问题
1. 生产/消费者模型生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”、“消费者”、“仓库”和“产品”。他们之间的关系如下:(01) 生产者仅仅在仓储未满时候生产,仓满则停止生产。(02) 消费者仅仅在仓储有产品时候才能消费,仓空则等待。(03) 当消费者发现仓储没产品可消费时候会通知生产者生产。(04) 生产者在生产出可消费产品时候,应该通知等待的消费者去转载 2016-06-23 16:11:45 · 2149 阅读 · 0 评论 -
java多线程--优先级
1. 线程优先级的介绍java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。java 中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。用户线程一般用户执行用户级任务,而守护线程也就是“后台线程”,一般用来执行后台任务。需要注意的是:Ja转载 2016-06-23 16:00:20 · 4103 阅读 · 0 评论 -
java多线程--中断线程
2. 终止线程的方式Thread中的stop()和suspend()方法,由于固有的不安全性,已经建议不再使用!下面,我先分别讨论线程在“阻塞状态”和“运行状态”的终止方式,然后再总结出一个通用的方式。2.1 终止处于“阻塞状态”的线程通常,我们通过“中断”方式终止处于“阻塞状态”的线程。当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此转载 2016-06-23 15:39:33 · 1990 阅读 · 0 评论 -
java多线程--join函数
1. join()介绍join() 定义在Thread.java中。join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。这句话可能有点晦涩,我们还是通过例子去理解:// 主线程public class Father extends Thread { public void run() { Son s = new Son();转载 2016-06-23 11:02:44 · 5583 阅读 · 2 评论 -
java多线程--线程休眠
1. sleep()介绍sleep() 定义在Thread.java中。sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。 2. sleep()示例下面通过一个简单示例演示sleep()转载 2016-06-23 10:50:02 · 5108 阅读 · 0 评论 -
java多线程--线程让步
1. yield()介绍yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行! 2. yield()示例下面,通过示例查看它的用法。 1 // YieldTest.j转载 2016-06-23 10:41:58 · 2134 阅读 · 0 评论 -
Java多线程-- 基本概念
多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thread类中的接口;synchronized关键字。注:JUC包是指,Java.util.concurrent包,它是由Java大师Doug Lea完成并在JDK转载 2016-06-22 11:15:37 · 776 阅读 · 0 评论 -
Java多线程--Runnable和Thread
概要本章,我们学习“常用的实现多线程的2种方式”:Thread 和Runnable。之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程。关于线程池的内容,我们以后会详细介绍;现在,先对的Thread和Runnable进行了解。本章内容包括:Thread和Runnable的简介Thread和Runnable的异同点Threa转载 2016-06-22 11:18:44 · 3515 阅读 · 0 评论 -
Java多线程--Thread中start()和run()的区别
概要Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答。本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start() 和 run()相关源码(基于JDK1.7.0_40)转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479083.html转载 2016-06-22 14:10:42 · 1102 阅读 · 0 评论 -
Java多线程-- synchronized
1. synchronized原理在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。不同线程对同步锁的访问是互斥的。也就是说,某时间点,对象的同步锁只能被一个线程获取到!通过同步锁,我们就能在多线程中,实现转载 2016-06-23 10:13:18 · 604 阅读 · 0 评论 -
Java多线程--线程等待与唤醒
wait(), notify(), notifyAll()等方法介绍在Object.java中,定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()转载 2016-06-23 10:24:41 · 7072 阅读 · 2 评论