多线程
中都
风习袅袅,盈水展千华,飞檐亭角清铃响;犹记当初,你回眸莞尔,一笑倾城百日香。!
展开
-
多线程(九)—— 阻塞队列
目录什么是阻塞队列阻塞队列源码1、ArrayBlockingQueue源码2、LinkedBlockingQueue源码什么是阻塞队列阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样...原创 2018-08-21 10:25:16 · 882 阅读 · 0 评论 -
多线程(十一)—— 死锁
目录死锁死锁产生原因:出现死锁的必要条件:死锁的预防或解除1、预防死锁(破坏4个必要条件)2、避免死锁(银行家算法)3、检测与接触死锁4、如何检查程序中的死锁?死锁死锁是指两个或者两个以上的线程在执行过程中,由于竞争资源而造成的阻塞问题,若无外力作用下,他们将无法推进下去。此时系统处于死锁状态死锁产生原因:1、因竞争资源产生死锁2、进程顺序推进不当发生死锁出现死锁的必要条件:1、互斥...原创 2018-08-27 08:29:49 · 444 阅读 · 0 评论 -
多线程 (八)—— Condition
我们从Condition对象的创建开始:Condition对象是通过ReentrantLock对象的newCondition()方法来创建的:下面就来看看ConditionObject类的源码:下来主要看有关通信的三个方法await()、signal()、signalAll()方法,其他方法调用的时候再看;总结一下就是:1、await的过程如下:①将当前线程加入等待队列(等...原创 2018-08-21 08:02:25 · 398 阅读 · 0 评论 -
多线程(七)—— ReentrantLock源码解析
目录可重入锁有两种实现方式 :一、AbstractQueuedSynchronizer源码解析1、继承关系2、构造函数3、属性二、ReentrantLock源码解析1、继承关系2、构造函数3、属性和内部类Sync类源码(公平锁和非公平锁的父类):NonfairSync(非公平性锁)源码:FairSync(公平性锁)源码4、方法可重入锁有两种实现方式 :1、公平锁:先来后到,先来抢锁的线程先执行...原创 2018-08-20 17:00:22 · 1213 阅读 · 0 评论 -
多线程(六)——锁
目录锁的种类1、乐观锁CAS机制(也叫无锁编程):2、悲观锁3、偏向锁4、轻量级锁5、可重入锁6、可中断锁7、限时锁:锁的种类1、乐观锁乐观锁、悲观锁都是一种理论锁,具体的实现还是靠那些实质的锁实现的。特性:每次对数据操作的时候都不担心数据被修改,当数据进行读取操作的时候,不需要加锁,当更新数据时,需要判断数据是否被修改,未被修改时则可以直接更新(CAS机制就是乐观锁的体现);缺点:也...原创 2018-08-20 07:59:11 · 735 阅读 · 0 评论 -
多线程(五)—— 原子更新操作类
原子类(jdk1.5操出现的)提供原子操作,主要分为以下四类:原子更新基本类型原子更新数组原子更新抽象类型原子更新字段1、原子更新操作类AtomicInteger(int)、AtomicLong(long)、AtomicBoolean(boolean);他们提供的方法基本一致:方法作用int addAndGet(int delta)以原子方式将输入的数值与...原创 2018-08-19 11:16:14 · 602 阅读 · 0 评论 -
多线程(四)——线程的同步和通信
目录一、线程同步二、线程的通信wait()方法和notify()或notifyAll()线程安全是指多个线程访问同一代码,不会产生不确定的结果;一、线程同步为了避免多线程在共享资源时发生冲突,所以 要在线程使用该资源时,就为线程上一把“锁”,第一个访问资源的线程为资源上锁,其他线程若想访问该资源,则必须等待解锁为止,解锁的同时,另一个线程访问资源并为资源上锁。在使用多线程编程时,一般解决同...原创 2018-08-19 08:19:43 · 727 阅读 · 0 评论 -
多线程(一)——线程的概念和线程的创建
目录1、什么是线程?它与进程有什么区别?为什么要使用多线程?2、如何实现多线程?1、什么是线程?它与进程有什么区别?为什么要使用多线程?①线程是指程序在执行过程中,能够执行程序代码的一个执行单元(程序执行一般以进程为单位,线程是程序执行的最小单元)(线程有三种状态:就绪、运行、阻塞);②进程指一段正在执行的程序,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段和堆空间...原创 2018-08-13 17:38:47 · 334 阅读 · 0 评论 -
多线程(二)——线程的状态和线程操作的相关方法
目录1、线程状态2、线程操作的相关方法1、线程状态线程状态:6种线程状态(英文)线程状态NEW新建状态RUNNABLE可运行状态(就绪状态)TIMED_WAITING睡眠状态BLOCKED阻塞状态WAITING等待状态TERMINATED终止状态(死亡状态)线程的状态转换图:2、线程操作的相关方法方法名作用...原创 2018-08-14 08:30:38 · 590 阅读 · 0 评论 -
多线程(三)——run()方法和start()方法的区别
线程的run()方法是由java虚拟机直接调用的,如果我们没有启动线程(没有调用线程的start()方法)而是在应用代码中直接调用run()方法,那么这个线程的run()方法其实运行在当前线程(即run()方法的调用方所在的线程)之中,而不是运行在其自身的线程中,从而违背了创建线程的初衷;下面是一个用来说明start()方法和run()方法的区别的实例:public class WelcomT...原创 2018-08-17 09:18:41 · 23938 阅读 · 7 评论 -
多线程(十)—— ConcurrentHashMap源码解析
目录ConcurrentHashMap的特点:线程安全ConcurrentHashMap JDK1.7源码解析:1、继承关系2、属性和主要构造方法3、重要方法ConcurrentHashMap 在JDK 1.7个JDK 1.8上的不同点:ConcurrentHashMap的特点:线程安全ConcurrentHashMap底层数据结构:数组+数组+链表(可以理解就是一个存储HashMap元素的...原创 2018-08-21 20:44:28 · 1141 阅读 · 0 评论 -
多线程(十二)—— 线程池
目录1、为什么要有线程池2、线程池类的继承关系3、ThreadPollExecutor源码解析:4、线程池执行过程5、Executors静态工厂里的线程池1、为什么要有线程池优点:①避免大量线程之间相互的抢占资源导致的阻塞现象②减少线程的创建和销毁带来的开销提升性能③提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行④提高线程的可管理性。线程是稀缺资源,如果无限制的创...原创 2018-08-27 09:32:58 · 718 阅读 · 0 评论