![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
欧拉兔
vfrvwr
展开
-
线程池任务队列和拒绝策略
1.任务队列BlockingQueue<Runnable> workQueue;workQueue是一个BlockingQueue接口的对象,仅用于存放Runnable对象。1.SynchronousQueue直接提交策略表示线程池不对任务进行缓存。新进任务直接提交给线程池,当线程池中没有空闲线程时,创建一个新的线程处理此任务。这种策略需要线程池具有无限增长的可能性。Executors.newCachedThreadPool()使用SynchronousQueue创建线程池。原创 2020-09-16 13:55:02 · 1608 阅读 · 0 评论 -
多线程-线程池原理
线程复用我们知道线程池的一个作用是创建和销毁线程的次数,每个工作线程可以多次使用。这个功能就是线程复用。想要了解 Java 线程池是如何进行线程复用的,我们首先需要了解线程的生命周期。线程生命周期下图描述了线程完整的生命周期:在一个线程完整的生命周期中,它可能经历五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、终止(Zombi...原创 2019-07-07 00:27:32 · 105 阅读 · 0 评论 -
多线程-线程池的简介以及使用
线程池是什么?线程池用于多线程处理中,它可以根据系统的情况,可以有效控制线程执行的数量,优化运行效果。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。线程池的作用在面向对象的编程过程中,创建对象和销毁对象是非常消耗时间和资源的。因此想要最小化...原创 2019-07-07 00:10:08 · 213 阅读 · 0 评论 -
多线程-Hook线程及捕获线程异常
在Thread类中,关于处理运行时运行异常的API总共有四个, 如下所示:public void setUncaughtExcetionHandler(UncaughtExceptionHandler eh) 为某个特定线程指定UnCaughtExceptionHandler public static void setDefaultUncaughtExceptionHandler(Unca...原创 2019-07-06 21:38:55 · 744 阅读 · 0 评论 -
多线程-ThreadGroup详细讲解
默认情况下, 新的线程都会被加入到main线程所在的group中, main线程的group名字同线程名。 如同线程存在父子关系一样,ThreadGroup同样也存在父子关系。创建ThreadGrouppublic ThreadGroup(String name) public ThreadGroup(ThreadGroup parent, String nmae)public cl...原创 2019-07-06 00:15:03 · 1694 阅读 · 1 评论 -
多线程-线程间通信(wait、notify和notifyAll)
1.同步阻塞与异步非阻塞1.1同步阻塞消息处理有这样一个系统功能,客户端提交Event至服务器,服务器接收到客户请求之后创建线程处理客户请求,经过复杂的业务计算后将结果返回给客户端。这样的设计存在几个显著的缺陷:同步Event提交,客户端等待时间太长(提交Event时长 + 接收Event创建Thread时间 + 业务处理时间 + 返回结果时长)会陷入阻塞,导致二次提交Eve...原创 2019-07-05 23:28:15 · 260 阅读 · 0 评论 -
多线程-synchronized中的while和notifyAll
问题为什么是while 而不是if大多数人都知道常见的使用synchronized代码:synchronized (obj) { while (check pass) { wait(); } // do your business}那么问题是为啥这里是while而不是if呢?这个问题 我最开始也想了很久, 按理来说 已经在synchro...原创 2019-07-05 19:48:41 · 285 阅读 · 0 评论 -
多线程-Thread API详细介绍
1.Sleep方法sleep是一个静态方法,有两个重载参数,一个需要转入毫秒数,另一个需要传入毫秒和纳秒数。public static void sleep(long millis) throws InterruptedException;public static void sleep(long millis,int nanos) throws InterruptedExceptio...原创 2019-07-04 23:25:51 · 172 阅读 · 0 评论 -
多线程-生命周期详解
问题:线程Thread执行了start方法就表示该线程已近执行了忙?下面看线程生命周期图由以上图可以知道,线程的生命周期大致可以分为以下五个阶段:NEWRUNNABLERUNNINGBLOCKEDTERMINATED1.NEW状态当我们new出一个Thread类的时候,此时它并不在执行状态,并且它并没有调用Start方法,那么此时线程的状态为New。NEW状态通过Star...原创 2019-07-04 22:54:35 · 348 阅读 · 0 评论 -
多线程-使用Synchronized需要注意的问题
1.与Monitor关联的对象不能为空意思就是说你Synchronized() 括号中的对象不能为nullprivate final Object obj = null;public void syncMethod(){ Synchronized(obj){ }}2.synchronized作用域太大由于synchronized 存在排他性,如果synchro...原创 2019-07-04 19:50:58 · 643 阅读 · 0 评论 -
多线程-Synchronized的使用
1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2.实现原理synchronized可以保证方法或者代码块在运行...原创 2019-07-04 18:47:33 · 219 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。1.CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后...原创 2019-06-16 19:10:14 · 82 阅读 · 0 评论