![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
不洇
新手小白,多多指教,共同分享,持续进步
展开
-
多线程中出现死锁和CPU占用100%怎么解决
参考原文:Java死锁排查和Java CPU 100% 排查的步骤整理使用 jps + jstack,排查步骤:使用命令列出当前运行的java进程的pid: jps -l使用命令查看(假如第1步查到的java进程pid为 1234):jstack -l 1234注意第2步中是否有提示 “ Found x deadlock ” 如有,则表示有死锁存在,其中 x 表示死锁的个数...转载 2020-09-08 21:41:53 · 747 阅读 · 0 评论 -
并发编程之锁的原理--java并发编程之美(四)
文章目录LockSupport工具类的常用方法及作用void park()void unpark(Thread thread)方法void parkNanos(long nanos)方法void park(Object blocker)方法(推荐使用,可查阻塞线程)void parkUntil(Object blocker,long deadline)那么wait和notify呢?与park,unpark的比较锁的底层支持--AQS(抽象同步队列)独占锁ReentrantLock的原理void lock()原创 2020-09-04 21:01:27 · 237 阅读 · 0 评论 -
synchronized锁升级一个过程
文章目录synchronized出现锁升级的原因锁升级的状态无锁偏向锁什么是锁竞争轻量级锁重量级锁锁的优缺点synchronized出现锁升级的原因在jdk1.6以前,synchronized锁是低效的,因为synchronized在当初来讲,一直是一个重量级的锁,只允许获取锁的线程执行,而其它线程都要阻塞。等待线程释放锁之后,再由cpu进行线程调度。这种由用户态到内核态的切换,是会涉及到上下文切换,要保存环境资源,是十分消耗性能的。所以在1.6之前synchronized同步的方法,执行效率都很慢。于原创 2020-09-04 21:00:48 · 344 阅读 · 0 评论 -
并发编程之并发集合--java并发编程之美(三)
文章目录CopyOnWriteArrayList的介绍CopyOnWriteArrayList的add操作CopyOnWriteArrayList的get,getArray操作CopyOnWriteArrayList的弱一致性问题CopyOnWriteArraySet简单介绍CopyOnWriteArrayList的介绍JUC并发包下的并发List只有一个CopyOnWriteArrayListCopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的原创 2020-09-01 13:53:51 · 84 阅读 · 0 评论 -
JUC学习随记
想要看视频入门的小伙伴可以去看狂神的视频哈。我觉得最为入门是很舒服的。良心up主。点击前往:遇见狂神说文章目录开始并发学习java能开启线程吗wait和sleep的区别一般怎么写线程Lock加锁三步Synchronized和Lock的区别锁的是谁的问题虚假唤醒的问题在集合类中,怎么解决不安全的问题Callable接口CountDownLatchCyclicBarrierCountDownLatch和CyclicBarrier区别开始并发学习java能开启线程吗不能,start方法的源码里,是去调用原创 2020-08-11 21:33:07 · 235 阅读 · 0 评论 -
锁类别的简单介绍
文章目录悲观锁乐观锁公平锁和非公平锁独占锁和共享锁可重入锁自旋锁悲观锁对任何数据类的操作持悲观的态度,认为任何数据操作都会发生线程不安全的现象。所以对每一个操作都会加上悲观锁。悲观锁的实现往往依靠数据库提供的锁机制。乐观锁任何数据操作在一般情况下是不会产生线程不安全的问题的,持乐观的态度。其不会在数据操作前加锁,这样也就不会发生等待。乐观锁会在数据进行提交更新时再上锁,再开始对数据进行检测。通过一种类似CAS的感觉,比较数据前后版本号version(自加字段)或者业务的状态来判断操作是否有效。公平原创 2020-08-11 21:26:22 · 123 阅读 · 0 评论 -
并发集合中对于ThreadPoolExecutor的一点理解
文章目录概念理解优缺点优点缺点根据场景确定线程数已有线程池 (4大方法)自定义线程池(7大参数)拒绝策略 (4大策略)拒绝策略的使用场景线程池的调优概念理解线程池是一种使用模式,它可以避免我们的程序频繁创建线程所消耗的时间和代价。通过线程池的方式,让已创建好的线程等待任务调用,并让执行完任务的线程重新等待。优缺点优点即时等待任务的线程模式,提高了任务响应速度。降低了创建线程的系统资源开销,充分利用了CPU核数,防止过分调度。所有线程都呆在一起,方便了统一管理和调优。缺点线程的创建和销毁是影原创 2020-08-11 20:03:53 · 311 阅读 · 0 评论 -
并发编程进阶类学习--java并发编程之美(二)
文章目录Random类原理及其局限性上述代码的执行流程应运而生的ThreadLocalRandom使用LongAdder(jdk1.8新增)相比于AtomicLong的好处具体LongAdder实现原理LongAdder的设计结构简略图简单聊一下LongAdder的add方法LongAccumulator类(jdk1.8新增)相比于LongAdderRandom类原理及其局限性先来看这个// 生成一个随机数0-9的整数(int)(Math.random()*10);其实Math.random底层原创 2020-07-30 22:16:29 · 113 阅读 · 0 评论 -
并发编程的基础知识--java并发编程之美(一)
文章目录线程的三种创建方式线程的三种创建方式继承Thread类,创建线程,但由于java类继承的单一性,所以该类就无法再继承其它类。一个类实现Runnable 接口,将该类作为实例传入Thread一个类实现Callable接口,有返回值。将该类作为实例传入FutureTask,再将FutureTask的实例传入Thread。public class demo1 { /** * 线程的三种创建方式 */ public static class My原创 2020-07-30 21:36:37 · 138 阅读 · 0 评论