
Java多线程
雪落南城
这一场人间流浪,长随步履温柔相候
展开
-
为什么线程池在创建线程的时候用ThreadFactory
如题,java线程池创建线程时用的是当然 这个线程工厂有默认的实现同时支持使用自定义的线程工厂,继承ThreadFactory接口即可那么,这么做的好处是什么呢其实这个问题同时也在问 工厂模式的好处是什么:1.可以自定义线程生成的逻辑,比如自定义线程名称等2.方便统计产生的线程数Spring内部的线程工厂...原创 2021-10-10 19:38:01 · 333 阅读 · 0 评论 -
何谓协程?
今天有幸得知了一个名词 协程Coroutines,记录并分享一下协程是⼀种⽐线程更加轻量级的东⻄,相⽐于由操作系统内核来管理的进程和线程,协程则 完全由程序本身所控制,也就是在⽤户态执⾏。协程避免了像线程切换那样产⽣的上下⽂切 换,在性能⽅⾯得到了很⼤的提升;详细内容后续找到资料补上;...原创 2021-06-02 08:47:54 · 94 阅读 · 0 评论 -
当线程池作为局部变量时,方法结束后线程池会被垃圾回收吗?
当线程池中有正在运行的线程时,结论是不会被垃圾回收。线程池的原理如下ThreadPoolExecutor当执行一个Runnable时,会先创建一个ThreadPoolExecutor中的内部类Worker对象,将这个Runnable对象作为Worker对象的一个成员变量所以 当线程在执行的时候引用关系如下ThreadPoolExecutor->Worker->thread...原创 2020-03-17 23:15:27 · 7792 阅读 · 3 评论 -
线程池使用无界队列时可能会内存溢出的情况
当我们使用线程池时,如果用到的阻塞队列为LinkedBlockingQueue,默认大小是Integer.MAX_VALUE这样就会出现一种情况,如果核心线程因某些情况一直被阻塞(比如说请求外部的服务因网络原因一直阻塞),那么后边来的线程都会放入这个阻塞队列中,慢慢地可能就会导致这个内存不足代码模拟:ThreadPoolExecutor threadPool = new ThreadPoo...原创 2020-03-13 10:48:45 · 3365 阅读 · 0 评论 -
线程各种操作对CPU资源和锁资源的状态
类#方法作用是否释放CPU资源是否释放锁资源Thread#sleep线程睡眠是否Thread#yield线程让步,将线程重置为就绪状态重新接受CPU调度是否Thread#join线程加入到当前线程,串行执行是是Object#waitObject的等待方法,需配合synchronized关键字是是...原创 2020-03-06 10:59:48 · 755 阅读 · 1 评论 -
我们依据什么配置线程池中线程的个数
一、首先了解本机的核心线程数Runtime.getRuntime().availableProcessors()二、判断项目属于 CPU密集型还是IO密集型1、CPU密集型CPU密集即需要大量运算,且没有阻塞,CPU一直全速运行参考公式:CPU核数 + 1比如8核CPU 我们可以构建9个线程的线程池2、IO密集型算法一: CPU核数*2算法二:IO密集即该任务需要大量的IO,...原创 2020-02-23 21:44:59 · 603 阅读 · 0 评论 -
Lock和Condition实现多线程循环执行
我们可能有如下使用场景:A、B、C三个线程,业务需要A执行5遍,然后B执行10遍,然后C执行15遍,如此循环这时候我们可以考虑用到Lock的Condition机制public class LockTest { private volatile int number = 1; private Lock lock = new ReentrantLock(); pri...原创 2020-02-22 20:51:38 · 337 阅读 · 0 评论 -
线程池中用到的阻塞队列-BlockingQueue
接口源码:public interface BlockingQueue<E> extends Queue<E> { /** * 向队列中添加元素 成功返回true,队列满了则抛出异常 */ boolean add(E e); /** * 向队列中添加元素,成功返回true,队列满了返回false */ ...原创 2020-02-21 18:46:28 · 567 阅读 · 0 评论 -
线程生命周期图
B站某视频看到的,挺不错:https://www.bilibili.com/video/av56034035?p=3原创 2020-01-16 00:27:31 · 130 阅读 · 0 评论 -
关于线程中断的一点思考和探究
起因:项目引入了sonar代码检测工具,检测出代码中关于InterruptException异常的处理存在问题项目中相关代码如下:public void demo() { RLock rLock = redissonClient.getLock(key); boolean tryLock = false; try { t...原创 2020-01-15 17:58:36 · 335 阅读 · 0 评论 -
ThreadPoolExecutor-线程池如何保证线程不被销毁
1、通常情况下 我们new一个线程执行任务,任务执行完之后线程也随之销毁了2、为了减少创建线程的开销,使线程可以复用,我们使用线程池3、那么问题来了,线程池是如何保证池子里的线程执行完不被销毁的呢?入口:我们使用线程池时,代码如下Executors.newFixedThreadPool(5);public static ExecutorService newFixedThr...原创 2019-10-23 14:34:40 · 7604 阅读 · 16 评论 -
线程池ThreadPoolExecutor
ThreadPoolExecutor是Executors调用的底层实现,Executors提供四种线程池newFixedThreadPool,newSingleThreadExecutor,newCachedThreadPool,newScheduledThreadPool例如:ExecutorService executorService = Executor...原创 2019-02-15 15:49:30 · 237 阅读 · 1 评论 -
CompletableFuture使用
参考链接:https://www.jianshu.com/p/6bac52527ca4public class CompletableFuture<T> implements Future<T>, CompletionStage<T> {...}Java8中提供了Future的新的实现1、 runAsync 和 supplyAsync方法C...原创 2019-05-23 11:00:50 · 202 阅读 · 0 评论 -
CountDownLatch-等待多个线程操作结束
适用场景:任务3需等待任务1和任务2完成后才可以执行demo:public static void main(String[] args) { ExecutorService executorService =Executors.newFixedThreadPool(3); CountDownLatch cdl = new CountDownLatch(3);...原创 2019-05-22 16:42:23 · 384 阅读 · 0 评论