
线程|并发
文章平均质量分 83
线程|并发
猎人在吃肉
这个作者很懒,什么都没留下…
展开
-
线程池 ExecutorService 的使用例子
package com.aop8.testJava;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.Executo...原创 2018-08-18 16:50:23 · 47833 阅读 · 2 评论 -
ExecutorService 中 shutdown()、shutdownNow()、awaitTermination() 含义和区别
一、方法说明1、shutdown():将线程池状态置为 shutdown ,并不会立即停止 英文原意:关闭,倒闭;停工1、停止接收新的submit的任务; 2、已经提交的任务(包括正在跑的和队列中等待的),会继续执行完成; 3、等到第2步完成后,才真正停止;2、shutdownNow():将线程池状态置为stop,企图立即停止,事实上不一定1、跟 shutdown...转载 2018-08-17 15:43:20 · 48532 阅读 · 8 评论 -
ThreadPoolExecutor 、Executors 创建线程池
ThreadPoolExecutor是 java提供的一个线程池工具类一、概述1、ThreadPoolExecutor 作为 java.util.concurrent 包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务; 2、Executors 方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。 3、先来了解其线程池管理的机制,有助于正确使用,转载 2017-11-17 14:55:46 · 438 阅读 · 0 评论 -
为什么不推荐通过Executors直接创建线程池
阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式。这是为什么?Executors 底层其实是使用的 ThreadPoolExecutor 的方式 创建的,但是使用的是 ThreadPoolExecutor 的默认策略,即 AbortPolicy。//默认策略 private static final Re...原创 2019-02-14 13:48:09 · 6592 阅读 · 0 评论 -
ThreadPoolExecutor 参数详解
1、 ThreadPoolExecutor 数据成员 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));ctl 主要用于存储线程池的工作状态以及池中正在运行的线程数。显然要在一个整型变量存储两个数据,只能将其一分为二。其中高3bit用于存储线程池的状态,低位的29bit用于存储正在运行的线程数。线程...转载 2019-02-15 14:10:22 · 22162 阅读 · 4 评论 -
Runnable、Callable、Future和FutureTask的说明
Runnable、Callable和Future的区别:一个不返回结果、一个产生结果,一个拿到结果。 Runnable Callable Future 无返回值 有返回值 拿到异步返回的结果Runnable Runnable 在java.lang包下,它是一个接口,只声明了一个run()方法:public interface Runnable { public转载 2017-12-03 17:48:10 · 533 阅读 · 0 评论 -
Lock ReentrantLock 示例,解决 虚假唤醒
Lock ReentrantLock 示例,解决 虚假唤醒原创 2018-08-17 21:22:19 · 1306 阅读 · 1 评论 -
Lock、ReentrantLock实现生产者,消费者的面试题
package com.aop8.proAndcum;import java.util.Random;import java.util.Vector;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock...转载 2019-02-13 18:23:36 · 1879 阅读 · 0 评论 -
3个线程 交替换打印,lock.newCondition()、Condition的使用例子
编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归package com.aop8.lock1;import java.util.Random;import java.util.concurrent.TimeUnit;import java.util....原创 2019-02-13 23:38:19 · 3601 阅读 · 0 评论 -
java.util.concurrent(JUC)包中的阻塞队列(全部)
文章目录1、阻塞队列1.1、BlockingQueue 接口1.1.1、BlockingQueue 用法1.1.2、 BlockingQueue 的方法1.1.3、BlockingQueue 的实现类1.1.4、 BlockingQueue 使用例子1.2、数组阻塞队列 ArrayBlockingQueue1.3、延迟队列 DelayQueue1.4、链式阻塞队列 LinkedBlockingQu...转载 2019-04-27 18:55:13 · 895 阅读 · 0 评论 -
队列和栈、JUC有界队列、 JUC无界队列的简单介绍
文章目录1、队列和栈2、有限队列2.1、SynchronousQueue:2.2、 ArrayBlockingQueue:3、 无限队列3.1、 LinkedBlockingQueue:3.2、 LinkedBlockingDeque3.3、PriorityBlockingQueue3.4、LinkedTransferQueuepublic ThreadPoolExecutor(int core...转载 2019-02-15 15:07:31 · 7125 阅读 · 0 评论 -
java.util.concurrent(JUC)包的简介
文章目录1、阻塞队列BlockingQueue2、阻塞双端队列BlockingDueue3、阻塞转移队列TransferQueue4、并发容器5、线程池6、线程分叉与合并7、锁8、原子类型9、并发工具Java 8并发工具包由3个包组成,分别是 java.util.concurrent、java.util.concurrent.atomic 和 java.util.concurrent.locks...转载 2019-04-29 15:04:56 · 344 阅读 · 0 评论 -
队列 LinkedBlockingQueue
1 apijava.util.concurrent包下的新类。LinkedBlockingQueue 就是其中之一,是一个阻塞的线程安全的队列,底层采用 链表 实现。LinkedBlockingQueue 构造的时候若没有指定大小,则默认大小为 Integer.MAX_VALUE ,当然也可以在构造函数的参数中指定大小。LinkedBlockingQueue 不接受null。添加元素的方法...转载 2019-02-15 15:34:46 · 1617 阅读 · 0 评论 -
Java中的锁分类的介绍 —— 公平锁/非公平锁、可重入锁、自旋锁、读写锁、分段锁、偏向锁等
文章目录1、乐观锁/悲观锁2、公平锁/非公平锁3、独享锁/共享锁4、可重入锁5、自旋锁6、互斥锁/读写锁7、分段锁8、偏向锁/轻量级锁/重量级锁在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:乐观锁/悲观锁公平锁/非公平锁独享锁/共享锁可重入锁自旋锁互斥锁/读写锁分段锁偏向锁/轻量级锁/重量级锁上面是很多锁的名词,这些分类...转载 2019-04-30 11:18:57 · 846 阅读 · 1 评论 -
java Thread interrupt()
转载:http://www.cnblogs.com/w-wfy/p/6415005.htmlJava 线程之中,一个线程的生命周期分为:初始、就绪、运行、阻塞以及结束。当然,其中也可以有四种状态,初始、就绪、运行以及结束。一般而言,可能有三种原因引起阻塞:等待阻塞、同步阻塞以及其他阻塞(睡眠、join或者IO阻塞);对于Java而言,等待阻塞是调用 wait() 产生的,同步阻塞则是由...转载 2019-05-06 16:19:54 · 1534 阅读 · 0 评论 -
java LockSupport 方法使用 和总结
参考文章:https://blog.csdn.net/black_bird_cn/article/details/82624373https://blog.csdn.net/secsf/article/details/78560013文章目录一、LockSupport中的一些基本方法二、LockSupport 基本特征三、LockSupport与其他锁的比较四、示例park() 阻塞park...转载 2019-05-07 12:07:17 · 3950 阅读 · 4 评论 -
LockSupport 使用总结和注意事项
0、前提看此文章的前提是必须已经学习了 LockSupport 的基本语法和了解 LockSupport 的 API的基本使用。一、简单在没有LockSupport之前,线程的挂起和唤醒咱们都是通过Object的wait和 notify/notifyAll 方法实现。写一段例子代码,线程A执行一段业务逻辑后调用wait阻塞住自己。主线程调用notify方法唤醒线程A,线程A然后打印自己执行...转载 2019-05-07 12:09:03 · 2785 阅读 · 3 评论 -
Callable 和 Runnable 的 区别(简单分析)
1、区别不同点 Callable Runnable 方法 V call() throws Exception run() 返回值 V call() 有返回值 void run() 没有返回值 异常 call() 可以抛出受检查的异常 run() 不能抛出异常 启动 1、使Thread 来包装,使用...转载 2014-12-09 10:53:44 · 6916 阅读 · 0 评论 -
CyclicBarrier ( 循环栅栏 )
CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await() 方法 进入等待的线程数。当线程数达到了最初设定的数目时,所有进入等待状态的线程被唤醒并继续执行。有限执行初始化的时候填入的构造参数runnable 。然后再唤醒所有等待线程。CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍...转载 2014-12-09 16:34:21 · 787 阅读 · 0 评论 -
CountDownLatch( 倒数计数器 )
说明CountDownLatch ( 倒数计数器)CountDownLatch doneSignal = new CountDownLatch(10);public boolean await() 当计数大于零,当前线程将一直处于休眠状态;并一直监控N和countDown()方法。 当直到countDown()将N减零为0,则当前的线程进入运行状态。public vo...转载 2015-03-02 23:16:03 · 780 阅读 · 0 评论 -
CountDownLatch (倒数计数器)使用例子
CountDownLatch doneSignal = new CountDownLatch(10);public boolean await()当计数(N)大于零,当前线程将一直处于休眠状态;并一直监控N和countDown()方法。当直到countDown()方法将 N 减为0,则当前的线程进入运行状态。public void countDown()每调用一次,计数...转载 2015-03-02 23:23:05 · 2612 阅读 · 0 评论 -
Semaphore 计数信号量的示例
Semaphore 信号量Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号acquire(),完成操作后归还信号release()。超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两...转载 2014-12-09 15:55:22 · 790 阅读 · 0 评论 -
Semaphore 计数信号量
转载: https://blog.csdn.net/hanchao5272/article/details/797800451.Semaphore 简介Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。所谓Semaphore即 信号量 的意思。这个叫法并不能很好地表示它的作用,更形象的说法应该是许可证管理器。Semaphore是一个...转载 2019-02-15 18:04:54 · 1721 阅读 · 1 评论 -
ZooKeeper 锁
ZooKeeper 分布式锁的核心代码import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Properties;import java.util.concurrent.CountDownLatch;import java.util.concurren...原创 2018-10-24 18:13:45 · 343 阅读 · 0 评论 -
从ConcurrentHashMap的演进看Java多线程核心技术
转载:https://blog.csdn.net/Habren/article/details/74371423线程不安全的HashMap众所周知,HashMap是非线程安全的。而HashMap的线程不安全主要体现在resize时的死循环及使用迭代器时的fast-fail上。注:本章的代码均基于JDK 1.7.0_67HashMap工作原理HashMap数据结构常用的底层数据结构主要有...转载 2018-11-15 10:00:09 · 246 阅读 · 0 评论 -
JDK1.7 ConcurrentHashMap 的源码解读
转载:https://blog.csdn.net/zzti_erlie/article/details/80179487转载 2019-02-12 18:37:41 · 459 阅读 · 0 评论 -
ForkJoin demo 示例
package com.aop8.forkjoin;import java.time.Duration;import java.time.Instant;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;import java.util.stream.LongStream...原创 2019-02-21 13:51:47 · 836 阅读 · 0 评论 -
volatile 关键字
volatile 关键字package com.aop8.testJava;import java.util.concurrent.TimeUnit;/** * 一、volatile 关键字:当多个线程进行操作共享数时,可以保证内存中的数据可见 * */public class TestVolatile { public static void main(S...原创 2018-08-18 10:29:41 · 266 阅读 · 0 评论