
多线程
大英雄和小英雄
船停在港湾是很安全的,但那不是造船的目的。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程池相关
1.在线程池中使用无界堵塞队列会发生什么问题?面试题:在远程服务异常的情况下,使用无界堵塞队列,是否会导致内存异常飚升?调用超时,队列变得越来越大,此时会导致内存飙升,而且还可能会导致OOM,内存溢出。...原创 2020-02-15 22:47:45 · 141 阅读 · 0 评论 -
线程池的工作原理与源码解读
一、线程池创建先看一下ThreadPoolExecutor参数最全的构造方法:①corePoolSize:线程池的核心线程数,说白了就是,即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。②maximumPoolSize:最大线程数,不管你提交多少任务,线程池里最多工作线程数就是maximumPoolSize。③keepAliveTime:线程...原创 2020-02-15 22:15:03 · 183 阅读 · 0 评论 -
合理配置线程池
要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析:任务的性质:CPU密集型任务,IO密集型任务和混合型任务。任务的优先级:高,中和低。任务的执行时间:长,中和短。任务的依赖性:是否依赖其他系统资源,如数据库连接。任务性质不同的任务可以用不同规模的线程池分开处理。CPU密集型任务配置尽可能少的线程数量,如配置Ncpu+1个线程的线程池。IO密集型任务则由...原创 2019-09-17 13:58:50 · 145 阅读 · 0 评论 -
线程池之-newFixedThreadPool
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。示例如下:package com.executor.test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author 作者:wx * ...原创 2019-09-17 11:29:10 · 426 阅读 · 0 评论 -
线程池之-newCachedThreadPool
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。package com.executor.test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author 作者:...原创 2019-09-16 14:58:07 · 1364 阅读 · 0 评论 -
堵塞队列-BlockingQueue
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。BlockingQueue即阻塞队列,从阻...原创 2019-09-16 13:58:05 · 242 阅读 · 0 评论 -
倒计时器:CountDownLatch
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是一个非常实用的多线程控制工具类。常用的就下面几个方法:CountDownLatch(int count) //实例化一个倒计数器,...原创 2019-09-12 14:39:49 · 215 阅读 · 0 评论 -
Volatile关键字
什么是VolatileVolatile 关键字的作用是变量在多个线程之间可见。代码:package com.thread.test;/*** @author 作者:wx* @createDate 创建时间:Aug 30, 2019 3:14:49 PM*/public class ThreadVolatileTest { public static void main(...原创 2019-08-30 16:16:40 · 152 阅读 · 0 评论 -
Java内存模型
共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲...原创 2019-08-30 16:00:15 · 192 阅读 · 0 评论 -
守护线程
java种有两种线程,一种是用户线程,另一种是守护线程。用户线程指用户自定义创建的线程,主线程停止,用户线程不会停止。守护线程当进程不存在或者主线程停止,守护线程也会被停止。首先我们先看用户线程的demo:package demo1;/** * * @author wx * */public class Test005 { public static void...原创 2019-08-11 20:59:54 · 137 阅读 · 0 评论 -
join()方法作用
join作用是让其他线程变为等待,t1.join();//让其他线程变为等待,直到当前t1线程执行完毕,才释放。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。需求:创建一个线程,子线程执行完毕后,主线程才能执行。package demo1;...原创 2019-08-14 22:01:42 · 6644 阅读 · 0 评论