![](https://img-blog.csdnimg.cn/20200122195553144.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java多线程
文章平均质量分 76
并发编程
蜡笔小ming
再见
展开
-
深入线程池原理和自定义线程池
自JDK1.5起,untils包提供了ExecutorService线程池的实现,主要目的就是为了重复利用线程,提高系统效率,我们知道线程的创建、启动及销毁都是比较占资源的,因此对线程的重复利用是一种非常好的程序设计习惯,加之系统创建线程的数量是有限的,线程的数量和系统的性能是一种抛物线关系,也就是说达到一定数量后,性能会降低很多。 那我们就思考线程是不是越多越好呢? ...原创 2019-01-15 16:24:51 · 369 阅读 · 0 评论 -
多线程之 阻塞队列
简介: 大神Doug lea 给我们开发者创建了一个名为BlockQueue的接口,见名知义就是阻塞队列,它是线程安全的,经常在JUC包下源码下可以看到它的身影,究竟为何物我们一起来学习下吧。 从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出;常用的队列主要有以下两种(当然通过不同的实现方式,还可以延伸出很多不同类型的...原创 2020-01-21 14:44:58 · 514 阅读 · 0 评论 -
java遇到的问题,求解答
题目一:可见性 public class Demo { private static Boolean flag = true; public static void main(String[] args) throws InterruptedException{ new Thread (() -> { System.ou...原创 2019-10-26 11:19:24 · 174 阅读 · 1 评论 -
Conditon用法整理
关键字syncronized与wait()和notify()和notifyAll()可以实现等待通知,类ReentrantLock也可以实现同样的功能,但需要借助于Condition,这个类可以实现多路通知,也就是说在一个Lock对象里可以创建多个Condition实例(对象监视器),线程对象可以注册在指定的Condition中,从而可以选择性的通知线程在线程调度上更加灵活。 ...原创 2019-10-13 15:17:56 · 442 阅读 · 0 评论 -
多线程的各种锁
在学习多线程的时候,我们经常会听到可重入锁/不可重入锁、公平锁/非公平锁、读写锁现在我们就逐一它们的神秘面纱。 Lock包下的层级结构 1.可重入锁/非重入锁:大部分jdk提供的都是可重入锁,如syncronized,reentrantLock 都是可重入,代表单个(也可以说同一个)线程可以多次获得该锁,如果单个线程拿到锁没有释放,你再去拿,拿到则是重入锁 ,拿不到则是非...原创 2019-10-05 09:27:55 · 203 阅读 · 0 评论 -
forkjoin线程框架
fork英文含义为叉子也可以理解为拆分,join英文含义为加入也可以理解为汇集,所以forkjoin可以理解为拆分任务然后将结果汇聚在一起,这种思想和大数据中的MapReduce很像(input --> split --> map --> reduce --> output),所以其可以大致分为两步:任务拆分和结果合并。 下面我将以一个demo来演示下for...原创 2019-07-30 00:12:08 · 128 阅读 · 0 评论 -
CountDownLanth(计数器) + CyclicBarrier(回环栅栏) + Semaphore(信号量)
CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了 。(运行主线程开启子线程的时候,子线程还没有结束的时候,主线程可以一直等待,直到初始化的现成的计数器count为0,主线程就可以不...原创 2019-04-03 20:48:25 · 917 阅读 · 0 评论 -
ThreadLocal的使用
从名称看,ThreadLocal 也就是thread和local的组合,也就是一个thread有一个local的变量副本,ThreadLocal提供了线程的本地副本,也就是说每个线程将会拥有一个自己独立的变量副本。 它与syncronized相反的思想,ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从...原创 2019-03-18 14:25:52 · 158 阅读 · 0 评论 -
线程池+ Callable +CompletableFuture 的基本使用
线程池的作用 1、减少线程创建与切换的开销 在没有使用线程池的时候,来了一个任务,就创建一个线程,我们知道系统创建和销毁工作线程的开销很大,而且频繁的创建线程也就意味着需要进行频繁的线程切换,这都是一笔很大的开销。 2、控制线程的数量 使用线程池我们可以有效地控制线程的数量,当系统中存在大量并发线程时,会导致系统性能剧烈下降。 3、循环利用有限的线程 线程池中会预先...原创 2019-03-18 00:27:39 · 1556 阅读 · 0 评论 -
理解多线程的中断方法及synchronized缺陷
public class SynchronizedDefect { public synchronized void method(){ try { System.out.println(Thread.currentThread().getName() + "进来了"); TimeUnit.SECONDS.sleep(10...原创 2018-12-31 00:52:42 · 1010 阅读 · 0 评论