
并发编程
文章平均质量分 64
烟花丿易冷
这个作者很懒,什么都没留下…
展开
-
并发编程之ThreadPoolExecutor源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档并发编程之ThreadPoolExecutor源码分析前言关于提交优先级和执行优先级关于线程池的执行和Thread.start的区别前言很久没写博客了,今天分享下阅读ThreadPoolExecutor线程池的核心流程的一些源码分析关于提交优先级和执行优先级线程池提交任务流程:核心线程创建,阻塞队列存放,最大线程数创建。我们知道阿里的规约中明确不让使用,newFixedThreadPool,newSingleThreadEx.原创 2022-05-06 21:45:10 · 324 阅读 · 0 评论 -
并发编程---多线程经典面试题之交替打印奇数偶数
多线程基本功题目代码题目启动两个线程, 一个输出 1,3,5,7…99, 另一个输出 2,4,6,8…100 最后 STDOUT 中按序输出 1,2,3,4,5…100。要求用 Java 的 wait + notify 机制来实现提示:wait和notify必须配合synchronized使用代码public class PrintNum{ //可以是任意一个对象,或者自定义的对象 static Object o1 = new Object(); public st原创 2020-11-03 16:35:19 · 381 阅读 · 0 评论 -
通过这道-----多线程任务统计磁盘来彻底搞懂JUC工具类的包
多线程任务统计磁盘题目一、CountDownLantch方式二、CyclicBarrier方式三、Semaphore方式题目假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?一、CountDownLantch方式import java.util.concurrent.*;import static java.lang.System.out;public class M原创 2021-03-30 10:55:08 · 283 阅读 · 0 评论 -
力扣多线程练习----交替打印FooBar---打印零与奇偶数
交替打印FooBar题目Semaphore代码Lock公平锁题目两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。请设计修改程序,以确保 “foobar” 被输出 n 次。Semaphore代码import java.util.concurrent.Semaphore;public class FooBar { private int n; public FooBar(int n) {原创 2021-03-21 09:56:20 · 320 阅读 · 0 评论 -
并发编程之如何让一个线程优雅的停下来?
文章目录状态流转图线程方法停止线程线程休眠状态流转图这里借鉴下狂神说的上课图线程方法join可以想象成插队,相当于VIP一样停止线程不推荐使用JDK自带的stop,destory停止线程,已经废弃推荐线程自己停下来,使用标志位flag,当他为false停止线程看一下代码public class ThreadStop implements Runnable{ //设置标志位 private boolean flag=true; @Override原创 2020-12-30 15:46:01 · 256 阅读 · 0 评论 -
聊一聊java中的死锁,详细分析一下!
提示:看完这篇文章,你将会了解什么是死锁,死锁的必要条件,线上环境查看死锁的命令,死锁怎么避免java中死锁分析一、什么是死锁?二、死锁必要条件1.互斥条件2.请求与保持条件3.请求与保持条件4.循环等待条件三、死锁线上环境查看四、避免死锁的办法一、什么是死锁?代码:public class DeadLearn extends Thread{ private String lockA; private String lockB; public DeadLearn(Stri原创 2020-11-07 22:07:25 · 126 阅读 · 0 评论 -
并发编程之CAS和Atomic
这里写自定义目录标题什么是原子操作Atomic先来看个例子了解下CAS给大家看个手写CAS例子Automic三大APIAtomicIntegerArrayAtomicReferenceArrayAtomicIntegerFieldUpdaterAtomicReferenceFieldUpdaterABA问题及解决内存屏障什么是原子操作原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。Java里是如何实现原子操作在原创 2020-09-12 20:27:55 · 1043 阅读 · 0 评论 -
并发编程之synchronized详解
这里写自定义目录标题设计同步器的意义synchronized原理详解对象的内存布局偏向锁锁的膨胀升级过程设计同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是: 对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改引出的问题: 由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问!如何解决线程并发安全问题?实际上,所有的并发模式在解决线程安全问题时,采用的原创 2020-09-12 16:37:59 · 369 阅读 · 1 评论 -
synchronize的8锁现象带你彻底了解
关于锁的8个问题前言例子1例子2例子3例子4前言synchronize的8锁现象,其实就是利用锁的8种应用场景的代码,带你彻底搞懂:synchronized 锁的对象是方法的调用者下面我们开始看例子例子1public class Test1 { public static void main(String[] args) { Phone phone = new Phone(); //这里注意不是先调用 phone.sendSms(),而是因为锁的存在原创 2020-09-12 10:05:27 · 529 阅读 · 0 评论 -
利用JUC,带你看看不一样的微信支付回调的处理!!!
countDownLatch及ScheduledThreadPoolExecutor在微信支付里的应用前言countDownLatch和ScheduledThreadPoolExecutor结合处理给大家个小例子总结前言最近做微信支付,考虑到安全问题,公司线上支付的服务器不能开端口给微信进行调用。所以之前的项目里都是微信下单后,跳转一个中间页面,调用后台进行查看是否支付成功。但是这样出现用户明明支付了订单,还是待付款的订单。原因有长时间不输密码了,断网了等等因素引起的。当用户量上去后,这种频率出现的原创 2020-09-11 17:15:27 · 318 阅读 · 0 评论 -
并发编程之CountDownLatch、Semaphore、CyclicBarrier原理与应用
并发编程之CountDownLatch&Semaphore原理与应用SemaphoreCyclicBarrierCountDownLatchSemaphore 可用于流量控制,限制最大的并发访问数public class SemaphoreRunner { public static void main(String[] args) { //每次只能有2个线程去执行 Semaphore semaphore = new Semaphore(2);原创 2020-09-08 13:39:49 · 334 阅读 · 0 评论 -
知道ThreadLocal嘛?讲讲它的内存泄漏
ThreadLocal深入分析ThreadLocal是什么ThreadLocal的initialValue()方法的流程图代码理解下ThreadLocal深入分析JAVA中引用类型有哪些?每种引用类型的特点?ThreadLocal的内存泄漏ThreadLocal是什么从名字我们就可以看到ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量原创 2020-09-04 14:52:18 · 266 阅读 · 0 评论 -
并发编程之定时任务&定时线程池
并发编程之定时任务&定时线程池定时线程池类的类结构图scheduleAtFixedRate解析scheduleWithFixedDelaytimer使用场景分布式锁-redis实现注册中心Eureka定时线程池类的类结构图用来处理定时任务或延时任务它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式:schedulescheduledAtFixedRatescheduledWithFixedDelay延迟执行任务,或者先提交线程原创 2020-08-31 22:48:51 · 691 阅读 · 0 评论 -
并发编程之阻塞队列
AQS之阻塞队列什么是BlockingQueue例子源码简析什么是BlockingQueue线程通信工具,在任一时刻,不管并发有多高,在单机JVM上面,同一时间永远只能有1个线程进行入队或出队操作。例子以生产者消费者这种场景,举个例子生产者,泡药和毒药@Slf4jpublic class NumbersProducer implements Runnable { private BlockingQueue<Integer> numbersQueue; priva原创 2020-08-30 10:01:14 · 322 阅读 · 0 评论 -
并发编程之Executor线程池原理
并发编程之Executor线程池原理与源码解读前言线程Java线程有多种生命状态线程池线程池介绍线程池参数解读线程池流程讲解源码讲解线程池重要参数源码分析四种拒绝策略线程池存5种状态解读线程数量设置前言在说线程池之前先了解下基本概念线程线程是调度CPU资源的最小单位,线程模型分为KLT模型与ULT模型,JVM使用的KLT模 型,Java线程与OS线程保持1:1的映射关系,也就是说有一个java线程也会在操作系统里有 一个对应的线程。解释下Java线程与OS线程保持1:1的映射关系,如下代码 fo原创 2020-08-29 22:35:54 · 192 阅读 · 0 评论