多线程
文章平均质量分 51
185的阿平
集中起来的力量可以击穿顽石
展开
-
多线程操作List
多线程原创 2022-07-15 14:53:39 · 4463 阅读 · 0 评论 -
多线程-线程池的基本使用及原理
基本认识jdk中提供了Executors框架获取几类线程池,经典的四类single(单例),fixed(固定),cache(缓存),Schedul(定时)。工作方式(如果不满足就流向下一步),创建核心线程---->队列存储--->创建救急线程--->拒绝策越。其中单例和固定线程池队列采用LinkBlockQueue无界队列当池中没有可用的线程时,优先放入队列中,cache使用同步有界队列,该队列特点是无容量,即有任务就创建线程不会往队列放,Schedul采用延迟队列,该队列会对..原创 2022-05-19 15:59:19 · 317 阅读 · 1 评论 -
多线程-无锁并发CAS,volatile,juc原子类
ReentrantLock接口中其实采用了CAS的思想,这个方法底层来源于AQS。再底层是基于unsafe类的native方法去实现无锁并发。CAS调用只需要传入旧值与新值,如果旧值不正确则不会修改成功。原创 2022-05-16 14:46:18 · 195 阅读 · 1 评论 -
多线程-ReentrantLock的特性及用法
ReentrantLock实现Lock接口,重写了Lock类中的方法。具有以下特性1.可重入。即在同一个线程中可对同一个lock对象重复加锁。public class TestReentrant { static ReentrantLock lock = new ReentrantLock(); public static void main(String[] args) { method1(); } public static void met原创 2022-05-10 17:57:47 · 300 阅读 · 0 评论 -
多线程-线程通信(wait-notify,await-single,park-unpark)
在多线程场景中,如有些线程需要依赖另外线程的结果而继续执行,如多个线程处理请求,有的处理的快有点慢。快的需要等待慢的线程结果一起提交执行结果。都会涉及到线程间的通信,就是A线程告知B线程处理的结果是怎么样,B线程再执行对应逻辑。通信比较经典的就是采用等待通知模式,当然还有join,volilate等也可作为通信手段。本文重点讲下API层面的通信。举个例子,三个线程T1,T2,MAIN的场景,T1因为条件不满足进入等待状态,等待其他线程的唤醒(可理解为孩子吃饭没辣条自己关上门在房间里等待辣条)。T2的工作原创 2022-04-22 16:02:45 · 474 阅读 · 0 评论 -
多线程-syncronized的应用与原理分析
synronized许多开发人员看到就认为是重量级锁,其实不然,JVM对它定义有很多种状态。偏向锁->轻量锁->重量锁。这其中有很多的优化过程,业务概念被称为锁膨胀,锁消除,锁撤销。下面来具体分析一下。首先syncronized本质作用于对象上,修饰普通方法锁this对象,修饰静态方法锁类对象。以下代码说明。@Slf4jpublic class SyncronThread03 { //以下代码效果一样 public synchronized void say(){原创 2022-04-14 22:07:08 · 636 阅读 · 0 评论 -
多线程-Thread类的常用方法及使用场景
众所周知,操作线程就必须熟读线程的API方法,万一你开个多线程刹不住车就歇菜了,下面就介绍一些API基本用法。包括sleep,join,yield,interrupt。sleep,让当前线程睡一会。原生用法Thread.sleep(毫秒),会抛出一个打断的异常;此方法可防止CPU100%的问题,如果你代码中有轮训机制,就会体验到。while(true) 中加上一个sleep,CPU至少会减低80%消耗。一般我们采用自制工具类。因为JUC中支持改玩意,不需要每次去catch异常public clas原创 2022-04-12 15:47:06 · 561 阅读 · 0 评论 -
多线程-java线程创建的四种方式
java中表面有四种创建线程的方法,其实可以说是两种1.通过Thread类,重写run方法。再调用其start。2.通过Thread类,实现Runable接口重写run方法。将Runable对象传入Thread类构造方法中,再调Thread类的start。3.通过Thread类,通过FutureTask和Callable接口重写run方法,将实例对象传入Thread类构造方法中,再调Thread类的start。4.通过ThreadPool来创建线程。需要往线程池中提交Callbale对象或R原创 2022-04-12 12:28:11 · 2280 阅读 · 0 评论