![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 74
林犀居士
这个作者很懒,什么都没留下…
展开
-
线程池ThreadPoolExecutor中ctl是什么?
先看一下注释,原文如下/***/简单翻译一下,就是 ctl是一个线程安全的int变量,用于存储了两个概念的字段,第一个是当前线程池中的工作线程数,另外一个是当前线程池的状态。通过上面案例的分析,想必大家对线程池中的ctl设计已经有所了解了。不过,在实际的业务开发中,我们还是要尽量避免这种写法,因为这样操作可能减少了变量,但是却增加了业务代码的复杂度,我们要好好思量下,一定要做好权衡!原创 2023-12-20 14:24:24 · 222 阅读 · 0 评论 -
证明程序会发生指令重排
反证法证明java程序会发生指令重排~原创 2022-03-16 22:20:31 · 600 阅读 · 0 评论 -
深入理解ReentrantLock和Condition
全文概要本篇将着手线程并发库,即java.util.concurrent包中的几个重要类。线程并发库是jdk1.5引入的,并发库的引入使得多线程开发更加的灵活多变,除此之外,因为java是面向对象的语言,线程并发库的引入让java多线程编程更加正统。本文主要内容如下:介绍Lock,Condition接口;通过使用Lock和Condition来模拟生产者/消费者模型,可以和传统线程实现生产者/消费者...原创 2018-02-24 15:55:17 · 2888 阅读 · 0 评论 -
使用wait()/notify()模拟生产者消费者模型
全文概要在并发性编程中,经常会碰到生产者/消费者模式。本文将通过传统线程来模拟生产者/消费者模型,后续还会使用阻塞队列和Lock等来解决。本文主要内容如下:对生产者/消费者模型的解释和说明;通过wait()/notifyAll()来模拟生产者/消费者模式。生产者/消费者模型说明生产者/消费者模型在多线程中是一个比较经典的问题,涉及的对象包括“仓库”、“生产者”、“消费者”等,他们的关系如下:当仓库...原创 2018-02-23 17:08:48 · 556 阅读 · 0 评论 -
线程优先级和守护线程
全文概要本文主要介绍线程的优先级和守护线程。创建的线程默认的优先级是5,当然可以自行设置优先级,优先级为[1,10]区间的整数;java中有两种线程,用户线程和守护线程,可以通过isDaemon()来判断,返回true表示守护线程;用户线程一般用来执行用户级任务,而守护线程一般用来执行后台任务,除此之外,守护线程有一个重要的特性:当所有的用户线程全部执行完毕后,无论守护线程的逻辑是否完成,JVM会...原创 2018-02-22 18:05:14 · 255 阅读 · 0 评论 -
深入理解join()方法
全文概要本文主要介绍Thread中join()方法的使用场景。join()方法介绍代码案例package com.tml.javaCore.thread;/** * <p>Thread类中join()方法 * @author Administrator * */public class JoinDemo { public static void main(String[...原创 2018-02-22 15:04:40 · 308 阅读 · 0 评论 -
阻塞队列BlockingQueue的应用
全文概要本文将介绍java.util.concurrent包下一个重要的接口BlockingQueue,主要内容如下:介绍BlockingQueue常见的API以及他们之间的区别;比较几个常见的BlockingQueue的实现类;阻塞队列经常用于生产者/消费者的场景,通过一个案例来实现。BlockingQueue常见APIBlockingQueue常见的API如下图所示:抛出异常是指当阻塞队列满的...原创 2018-03-08 16:19:50 · 281 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier和Semaphore应用
全文概要本文将介绍并发库中三个线程辅助类,CountDownLatch、CyclicBarrier和Semaphore。本文主要内容如下:通过一个案例介绍CountDownLatch的用法和使用场景;通过一个案例介绍CyclicBarrier的用法和使用场景;通过一个案例介绍Semaphore的用法和使用场景。CountDownLatchCountDownLatch简介CountDownLatch...原创 2018-02-28 15:16:53 · 239 阅读 · 0 评论 -
深入理解ThreadLocal
全文概要本文主要介绍lang包下的ThreadLocal对象,主要内容如下:简单分析下ThreadLocal源码通过一个案例说明ThreadLocal的使用规则和场景ThreadLocal源码分析在ThreadLocal中最重要的就数get()/set()方法了,源码如下:/** * Returns the value in the current thread's copy of th...原创 2018-03-07 17:54:49 · 231 阅读 · 0 评论 -
深入理解start()和run()方法
全文概要这篇博客主要讲述多线程中start()方法和run()方法的区别。线程中start()/run()方法的区别start():该方法是在当前线程中启动一个新的线程,而新启动的线程会调用run()方法,同时该方法不能重复调用;run() :该方法和普通的方法一样,可以重复执行,不会创建新的线程。下面以一个小的代码案例来说明:package com.tml.java原创 2018-01-20 12:47:25 · 10083 阅读 · 2 评论 -
深入理解synchronized关键字
全文概要本文主要介绍JAVA线程中synchronized关键字的用法。对于synchronized关键字主要包含以下几点:当一个线程访问某一个对象synchronized修饰的非静态方法或者代码块时,其他线程不允许访问该对象synchronized修饰的相同的方法或者代码块;当一个线程访问某一个对象synchronized修饰的非静态方法或者代码块时,其他线程不允许访问该对象sy原创 2018-01-26 17:59:51 · 219 阅读 · 0 评论 -
深入理解线程之间的通信
全文概要本文主要介绍wait()/wait(long timeOut)/notify()/notifyAll()的基本使用情况,包括以下内容:wait()和notify()联合使用,完成线程之间的通信交互;通过一个案例说明wait(long timeOut)的用法;通过一个案例说明notifyAll()的用法;总结下notify/wait使用场景wait()/notif原创 2018-02-04 22:01:40 · 268 阅读 · 0 评论 -
深入理解yield()和sleep()方法
全文概要本文主要介绍Thread类中yield()方法和sleep()方法的使用。包括以下内容:通过一个案例介绍yield()方法的使用;通过一个案例介绍sleep()方法的使用;通过以上案例比较yield()/sleep()/wait()三个方法的区别yield()方法介绍代码案例package com.tml.javaCore.thread;/**原创 2018-02-07 16:37:23 · 585 阅读 · 0 评论 -
深入理解ReentrantReadWriteLock
全文概要本文将继续讲述线程并发库,ReentrantReadWriteLock是本文的主要介绍对象。顾名思义,ReentrantReadWriteLock为可重入的读写锁。使用时,读取数据的时候上读锁,写数据的时候上写锁。读锁与读锁之间不互斥,写锁与写锁之间互斥,读锁与写锁之间互斥,这样就比synchronized的设计效率更加高明,能够最大限度的利用CPU资源解决问题。本文的主要内容如下:简单介...原创 2018-02-27 13:06:07 · 191 阅读 · 0 评论