Loading

随笔分类 -  Java

摘要:相同点 都是用来保护资源线程安全的 都可以保证可见性 可见性大致可以这样理解,线程A的加解锁的过程会对B线程完全可见,也就是说,线程A的加锁和解锁当时的锁持有的状态,线程B是可以获取到的,这也就体现到了hanppens-before针对synchronized的一个原则。 对于Lock而言,他也是可 阅读全文
posted @ 2022-03-24 23:59 邓小白 阅读(269) 评论(0) 推荐(0) 编辑
摘要:monitor的作用 我们都知道synchronized的作用是用来保证修饰的代码或者方法执行有且只有一个线程执行,也就是锁。那么在执行被锁住的方式时,synchronized就需要通过monitor来记录和保证锁的状态。所以monitor这里的作用其实就是起到了控制synchronized什么时候 阅读全文
posted @ 2022-03-24 23:55 邓小白 阅读(351) 评论(0) 推荐(0) 编辑
摘要:悲观锁 概念 悲观锁在已最坏的打算来考虑结果,它会在每次资源操作的同时,都需要对他进行加锁,避免其他的线程来抢占。在绝对上保证我这次执行是没有问题的。 适用场景 悲观锁适用于竞争激励的场景,例如高并发的读写操作。 典型案例 synchronized 关键字 public class TestLock 阅读全文
posted @ 2022-01-30 23:54 邓小白 阅读(147) 评论(0) 推荐(0) 编辑
摘要:锁的七大类 在Java的多线程中,有很多种锁,每种锁可能同时占有多个标准,比如ReentranLock即可是中断锁,又可以是可重入锁。 那么根据分类标准,我们可以把这些锁分为以下七大标准,分别是: 偏向锁/轻量级锁/重量级锁 可重入锁/非可重入锁 共享锁/独占锁 公平锁/非公平锁 悲观锁/乐观锁 自 阅读全文
posted @ 2022-01-29 15:22 邓小白 阅读(1232) 评论(0) 推荐(0) 编辑
摘要:下载官方安装包 下载地址:https://www.macports.org/install.php 选择自己的下载版本 安装MacPorts 步骤一:断开网络 步骤二:安装安装包 如果步骤一没断网成功会导致安装卡住,如果卡住了,需要强制退出软件 首先使用option+command+esc打开强制退 阅读全文
posted @ 2022-01-29 15:21 邓小白 阅读(11355) 评论(0) 推荐(0) 编辑
摘要:在了解线程复用原理之前,我们再回顾一下之前在线程池的初始配置详解的文章中提到的创建线程的流程 在线程提交线程任务的时候,线程池会提前判断线程池中执行的任务是否达到核心线程数了,如果达到了核心线程数那么他就会将这个多出来的任务塞入队列中,如果发现队列中的任务数也达到了上限,这个时候线程池就会开始在核心 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(642) 评论(0) 推荐(0) 编辑
摘要:什么是Java Agent Java Agent是在Java 1.5版本之才有的东西,他可以构建一个独立Java服务外的一个代理程序,也就是Agent。通常会用它来做一下Java服务的监控,或者替换其他JVM上的程序,还可以实现虚拟机上的AOP功能。 Agent分为两种,一种是程序启动前触发的,一种 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(1797) 评论(0) 推荐(0) 编辑
摘要:关闭线程池的方法 shutdown() 在调用这个关闭方法时,线程池会根据我们配置的拒绝策略来拒绝掉想要进来的线程,也就是说吧创建执行线程的入口给关闭掉了,直到线程池内的所有线程都执行完成。在调用这个方法完毕之后,并不代表这个线程池就真的都停掉了,只能说他不让其他线程进来了,然后等到线程池内的线程执 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(1897) 评论(0) 推荐(0) 编辑
摘要:我们在创建自己的线程池时,会时常因为不知道给核心线程数或者最大线程数设置多少为好,其实这个时需要看你的线程池的使用场景和服务器CUP的配置,根据这些前置条件,我们再去判断如何去设置合适的线程数,并不是我们想设置多少线程数大小就可以设置多少,这样可能会导致线程发挥不到最大的性能,甚至还有可能会导致服务 阅读全文
posted @ 2022-01-29 15:19 邓小白 阅读(1885) 评论(2) 推荐(0) 编辑
摘要:线程被拒绝的场景 结合上面的图,我们思考一个问题,当我们创建一个线程池的时候,他会有最大的线程数,和线程任务缓存数。如果系统的线程任务突然暴增,这个时候,线程池的线程达到最大值,线程队列中的缓存数也达到了最大值,这个时候,没有挤进线程池的该怎么办。 在使用线程池的时候,可能会遇到两种情况,导致线程会 阅读全文
posted @ 2022-01-29 15:18 邓小白 阅读(1145) 评论(0) 推荐(0) 编辑
摘要:简介 我们在了解完线程池的参数配置和常用线程池后发现,每种线程池会根据不同的需求去选择不同的队列来存储线程任务。线程池的对应队列如下: 可以看到,五大常用的线程池,会用到三种线程池 LinkedBlockingQueue LinkedBlockingQueue是一种没有容量上限的队列,也就是说,用了 阅读全文
posted @ 2022-01-29 15:18 邓小白 阅读(1028) 评论(0) 推荐(0) 编辑
摘要:创建一个线程池 首先我们看一个创建线程池的例子 执行类 public class ThreadInit { /** * corePoolSize - 要保留在池中的线程数,即使它们处于空闲状态,除非设置了allowCoreThreadTimeOut * maximumPoolSize - maxim 阅读全文
posted @ 2022-01-29 15:17 邓小白 阅读(538) 评论(0) 推荐(0) 编辑
摘要:在看这篇文章之前,请先了解一下线程的初始配置参数。 六大线程池 在我们日常业务开发中,如果遇到使用线程池的场景时,会先去思考一下这种场景需要使用到怎样的线程池,去避免线程资源滥用。这个时候选择困难症就来了,不过不用担心,Java其实早就已经给我们提供了六种快速创建线程池的方法,并且不需要设置繁琐参数 阅读全文
posted @ 2022-01-24 19:45 邓小白 阅读(6306) 评论(0) 推荐(0) 编辑
摘要:创建一个线程池 首先我们看一个创建线程池的例子 执行类 public class ThreadInit { /** * corePoolSize - 要保留在池中的线程数,即使它们处于空闲状态,除非设置了allowCoreThreadTimeOut * maximumPoolSize - maxim 阅读全文
posted @ 2022-01-24 19:45 邓小白 阅读(753) 评论(0) 推荐(0) 编辑
摘要:什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙 阅读全文
posted @ 2022-01-24 19:44 邓小白 阅读(885) 评论(0) 推荐(0) 编辑
摘要:有哪些场景需要额外注意线程安全 访问共享变量或资源 当在多线程的环境下,多个线程去访问共享的缓存或者对象时,同时操作会对结果造成不用程度的改变,尤其是在操作上不具备原子性的操作上时会发生这种情况,例如我们之前在【线程安全】 三类线程安全问题章节说到的i + +问题,他其实就属于一种对共享变量访问时, 阅读全文
posted @ 2022-01-24 19:43 邓小白 阅读(149) 评论(0) 推荐(0) 编辑
摘要:简单介绍一下Condition,Condition是Java1.5开始出现的,其出现的目的就是为了替代传统的Object的wait()、notify()实现线程间的协作。相比传统的方式使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。 常用方法介绍 方法名 阅读全文
posted @ 2022-01-24 19:41 邓小白 阅读(213) 评论(0) 推荐(0) 编辑
摘要:什么是生产者消费者模式 生产者消费者模式其实是一种设计模式,在生活中四处可见,比如我们在排队买奶茶,奶茶店里面的店员去生产奶茶,然后给消费者消费,在这里,店里面的店员就是一个生产者,顾客就是一个消费者。并且在生产者消费者的概念中,生产者和消费者是一一对应的,也就是说,奶茶店里面的店员生产了一杯奶茶只 阅读全文
posted @ 2022-01-24 19:41 邓小白 阅读(210) 评论(0) 推荐(0) 编辑
摘要:使用方法 wait 方法 作用 wait() 将当前运行的线程挂起(即让其进入阻塞状态),直到notify或notifyAll方法来唤醒线程。 wait(long timeout) 该方法与wait()方法类似,唯一的区别就是在指定时间内,如果没有notify或notifAll方法的唤醒,也会自动唤 阅读全文
posted @ 2022-01-24 19:40 邓小白 阅读(451) 评论(0) 推荐(0) 编辑
摘要:线程的六大状态 在多线程从创建到销毁,可能会经历六种状态 这六种状态我们可以看一下Java多线程的源码中是怎么解释的 public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** 阅读全文
posted @ 2022-01-24 19:39 邓小白 阅读(56) 评论(0) 推荐(0) 编辑