![](https://img-blog.csdnimg.cn/20191117111923460.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程高并发
饶艳辉
十年以上程序员老兵,关注技术交流、提倡原创、拥抱开源。专注服务端、数据结构、算法、互联网微服务、分布式、高可用等架构领域!!!
展开
-
Thread启动线程有哪些方法、区别?
大家都知道JAVA中开启线程最基础的方法有三种。分别是继承Thread类、实现Runnable接口、实现Callable接口,然后分别实现对应的方法,这里不过多描述。那么如果采用继承Thread类方式,匿名类方式实现Runnable对应run()方法后,有几种启动线程的方式,各有什么区别?package com.algorithm;/** * 面试锦集: * Thread启动线程...原创 2019-08-04 11:40:17 · 866 阅读 · 0 评论 -
JAVA多线程高并发之ReentrantLock讲解lock/unlock/tryLock方法
JAVA中多线程高并发场景下保证线程安全通常都会考虑加锁。但是在特殊场景下我们也可以采用java.util.concurrent包提供的线程安全的对象,避免加锁从而达到高效的目的。但是,这些线程安全的对象仅仅指的是针对于原子性操作是线程安全的,如果多个方法同时调用无法保证线程安全,只能考虑加锁。这里我们举个列子:假设我们在多线程高并发场景下使用java.util.concurrent.Conc...原创 2019-08-10 18:05:58 · 2822 阅读 · 0 评论 -
JAVA多线程高并发之ReentrantLock讲解lockInterruptibly方法
JAVA中多线程高并发场景下保证线程安全通常都会考虑加锁。但是在特殊场景下我们也可以采用java.util.concurrent包提供的线程安全的对象,避免加锁从而达到高效的目的。但是,这些线程安全的对象仅仅指的是针对于原子性操作是线程安全的,如果多个方法同时调用无法保证线程安全,只能考虑加锁。这里我们举个列子:假设我们在多线程高并发场景下使用java.util.concurrent.Conc...原创 2019-08-10 18:15:25 · 1314 阅读 · 0 评论 -
JAVA多线程高并发之ReentrantLock讲解公平锁
JAVA中多线程高并发场景下保证线程安全通常都会考虑加锁。但是在特殊场景下我们也可以采用java.util.concurrent包提供的线程安全的对象,避免加锁从而达到高效的目的。但是,这些线程安全的对象仅仅指的是针对于原子性操作是线程安全的,如果多个方法同时调用无法保证线程安全,只能考虑加锁。这里我们举个列子:假设我们在多线程高并发场景下使用java.util.concurrent.Conc...原创 2019-08-10 18:23:34 · 288 阅读 · 1 评论 -
JAVA手写一个多线程死锁
大家都知道多线程并发的时候,我们一般会用到锁。但是锁用不好,就会导致死锁。那么,死锁是如何产生的呢?一般造成死锁必须同时满足如下4个条件:互斥条件:线程使用的资源必须至少有一个是不能共享的。 请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其他线程持有的资源。 非剥夺条件:分配的资源不能从相应的线程中被强制剥夺。 循环等待条件:第一个线程等待其他线程,后者又在...原创 2019-08-11 17:28:28 · 843 阅读 · 0 评论 -
JAVA并发编程Fork/Join(分而治之思想)之(Future/Callable)
Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果从而得到这个大任务的结果。这里我们也借助这种思想来处理一个超大任务的运算,但是不用ForkJoinPool/ForkJoinTask这种方式,而采用ExecutorService/Future/Callable方式。我们来看一段ExecutorService/Future/...原创 2019-08-11 17:35:15 · 666 阅读 · 0 评论 -
JAVA并发编程Fork/Join(分而治之思想)之(ForkJoinPool/ForkJoinTask)
Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果从而得到这个大任务的结果。这里我们也借助这种思想来处理一个超大任务的运算,采用ForkJoinPool/ForkJoinTask这种方式。我们来看一段ForkJoinPool/ForkJoinTask方式实现的代码package com.forkjoin;impo...原创 2019-08-11 17:40:39 · 297 阅读 · 0 评论 -
JAVA并发编程下保证车票出售线程安全之synchronized锁
在并发编程场景下如何保证车票或者商品出售业务是线程安全的?首先我们就会想到加锁,来保证出售业务线程安全。但是加锁势必会带来性能上的瓶颈。那么我们就会思考,还有没有其它的方式避免加锁来实现同样的效果呢?这里我们带着这个问题,先采用常见的加锁方式来实现。package com.sync.ticket;import java.util.ArrayList;import java.ut...原创 2019-08-12 22:02:34 · 168 阅读 · 0 评论 -
JAVA并发编程下保证车票出售线程安全之ConcurrentLinkedQueue
在并发编程场景下如何保证车票或者商品出售业务是线程安全的?首先我们就会想到加锁,来保证出售业务线程安全。但是加锁势必会带来性能上的瓶颈。那么我们就会思考,还有没有其它的方式避免加锁来实现同样的效果呢?这里我们就采用ConcurrentLinkedQueue方式避免加锁来实现。package com.sync.ticket;import java.util.Queue;impor...原创 2019-08-12 22:08:28 · 183 阅读 · 0 评论 -
CopyOnWriteArrayList源码分析、使用场景说明
java.util.concurrent包下提供了很多并发编程使用的类,CopyOnWriteArrayList就是其中之一。CopyOnWriteArrayList是线程安全容器(相对于ArrayList),底层通过复制数组的方式来实现。CopyOnWriteArrayList在遍历的使用不会抛出ConcurrentModificationException异常,并且遍历的时候就不用额外加锁...原创 2019-08-26 07:01:16 · 619 阅读 · 0 评论 -
并发编程之LockSupport源码分析及简单使用
曾经面试被问到JAVA中实现线程挂起和唤醒有哪些方式,除了采用Object类中wait notify/notifyAll实现还有其他方式吗?当时真心没答上来,后来做了功课才知道还有LockSupport类中park/unpark可以实现。大家如果了解AQS(全称AbstractQueuedSynchronizer),就知道并发编程中很多类都是基于AQS实现的,例如ReentrantLock、 ...原创 2019-08-31 06:20:19 · 371 阅读 · 0 评论 -
Thread线程有哪几种状态,这篇文章带你深入了解!
Thread线程有哪几种状态,这也是面试中很多小伙伴都会被问到的知识点。Thread线程状态是应该掌握的基础知识。但是很多小伙伴如果没有总结过的话,面试过程可能会懵圈,这里我稍作整理,希望小伙伴们可以查漏补缺。Thread源码中有定义State的枚举类,State枚举类中有明确定义线程的状态。源码如下。public enum State { /** * ...原创 2019-08-31 19:14:07 · 1662 阅读 · 0 评论