Loading

摘要: 锁的七大类 在Java的多线程中,有很多种锁,每种锁可能同时占有多个标准,比如ReentranLock即可是中断锁,又可以是可重入锁。 那么根据分类标准,我们可以把这些锁分为以下七大标准,分别是: 偏向锁/轻量级锁/重量级锁 可重入锁/非可重入锁 共享锁/独占锁 公平锁/非公平锁 悲观锁/乐观锁 自 阅读全文
posted @ 2022-01-29 15:22 邓小白 阅读(1221) 评论(0) 推荐(0) 编辑
摘要: 下载官方安装包 下载地址:https://www.macports.org/install.php 选择自己的下载版本 安装MacPorts 步骤一:断开网络 步骤二:安装安装包 如果步骤一没断网成功会导致安装卡住,如果卡住了,需要强制退出软件 首先使用option+command+esc打开强制退 阅读全文
posted @ 2022-01-29 15:21 邓小白 阅读(10986) 评论(0) 推荐(0) 编辑
摘要: 什么是Java Agent Java Agent是在Java 1.5版本之才有的东西,他可以构建一个独立Java服务外的一个代理程序,也就是Agent。通常会用它来做一下Java服务的监控,或者替换其他JVM上的程序,还可以实现虚拟机上的AOP功能。 Agent分为两种,一种是程序启动前触发的,一种 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(1745) 评论(0) 推荐(0) 编辑
摘要: 关闭线程池的方法 shutdown() 在调用这个关闭方法时,线程池会根据我们配置的拒绝策略来拒绝掉想要进来的线程,也就是说吧创建执行线程的入口给关闭掉了,直到线程池内的所有线程都执行完成。在调用这个方法完毕之后,并不代表这个线程池就真的都停掉了,只能说他不让其他线程进来了,然后等到线程池内的线程执 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(1887) 评论(0) 推荐(0) 编辑
摘要: 在了解线程复用原理之前,我们再回顾一下之前在线程池的初始配置详解的文章中提到的创建线程的流程 在线程提交线程任务的时候,线程池会提前判断线程池中执行的任务是否达到核心线程数了,如果达到了核心线程数那么他就会将这个多出来的任务塞入队列中,如果发现队列中的任务数也达到了上限,这个时候线程池就会开始在核心 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(615) 评论(0) 推荐(0) 编辑
摘要: 我们在创建自己的线程池时,会时常因为不知道给核心线程数或者最大线程数设置多少为好,其实这个时需要看你的线程池的使用场景和服务器CUP的配置,根据这些前置条件,我们再去判断如何去设置合适的线程数,并不是我们想设置多少线程数大小就可以设置多少,这样可能会导致线程发挥不到最大的性能,甚至还有可能会导致服务 阅读全文
posted @ 2022-01-29 15:19 邓小白 阅读(1850) 评论(2) 推荐(0) 编辑
摘要: 线程被拒绝的场景 结合上面的图,我们思考一个问题,当我们创建一个线程池的时候,他会有最大的线程数,和线程任务缓存数。如果系统的线程任务突然暴增,这个时候,线程池的线程达到最大值,线程队列中的缓存数也达到了最大值,这个时候,没有挤进线程池的该怎么办。 在使用线程池的时候,可能会遇到两种情况,导致线程会 阅读全文
posted @ 2022-01-29 15:18 邓小白 阅读(1124) 评论(0) 推荐(0) 编辑
摘要: 简介 我们在了解完线程池的参数配置和常用线程池后发现,每种线程池会根据不同的需求去选择不同的队列来存储线程任务。线程池的对应队列如下: 可以看到,五大常用的线程池,会用到三种线程池 LinkedBlockingQueue LinkedBlockingQueue是一种没有容量上限的队列,也就是说,用了 阅读全文
posted @ 2022-01-29 15:18 邓小白 阅读(1016) 评论(0) 推荐(0) 编辑
摘要: 创建一个线程池 首先我们看一个创建线程池的例子 执行类 public class ThreadInit { /** * corePoolSize - 要保留在池中的线程数,即使它们处于空闲状态,除非设置了allowCoreThreadTimeOut * maximumPoolSize - maxim 阅读全文
posted @ 2022-01-29 15:17 邓小白 阅读(536) 评论(0) 推荐(0) 编辑