
Java并发编程
文章平均质量分 93
主要介绍的是java.util.concurrent包下的内容,俗称JUC。JUC提供了Java并发编程的规范
_小马快跑_
代码说,欢迎点赞、关注。感谢!
展开
-
Java线程基础知识点整理
文章目录进程和线程的区别对象的共享线程安全性原子性可见性有序性加锁机制volatileThread中start()和run()方法的区别Thread的状态Thread的几种状态之间的关系sleep()和wait()的区别notify()和notifyAll()的区别yield()join()interrupt()进程和线程的区别1、进程是资源分配的最小单位,线程是cpu调度的最小单位。2、进程可以看做独立应用,而线程不能。一个程序会产生一个进程,而一个进程包含一个或多个线程。3、进程间是相互隔离的,原创 2021-01-03 00:45:01 · 471 阅读 · 1 评论 -
JUC系列学习(二):AbstractQueuedSynchronizer同步器框架及相关实现类
文章目录写在前面AQS内部实现状态指示器state等待队列JUC中基于AQS的相关实现总结参考写在前面在并发编程中,我们经常用到的是synchronized和ReentrantLock。其中,synchronized是jvm内置锁,而ReentrantLock位于java.util.concurrent包下(以下简称JUC),ReentrantLock是基于AbstractQueuedSynchronizer(以下简称AQS)同步器框架实现的,本文主要来介绍AQS的内部实现及在JUC中基于AQS实现的相原创 2021-01-02 19:14:59 · 455 阅读 · 1 评论 -
JUC系列学习(一):线程池Executor框架及其实现ThreadPoolExecutor
文章目录Executor框架ThreadPoolExecutor执行流程线程池状态AsyncTaskAsyncTask中任务的串行&并行参考Executor框架Executor框架将任务的提交与任务的执行解耦了。Executor 顶层接口,Executor中只有一个execute方法,用于执行任务。线程的创建、调度等细节均由其子类实现ExecutorService 继承并扩展了Executor,在ExecutorService内部提供了更全面的提交机制以及线程池关闭等方法。Thread原创 2020-12-27 23:29:02 · 539 阅读 · 0 评论 -
Java多个线程顺序循环执行的几种实现方式
文章目录ReentrantLock+Condition方式实现Synchronized+wait/notifyAll方式实现两者对比ReentrantLock+Condition方式实现public class ReentrantLock_Impl { private static final String FLAG_THREAD_1 = "ReentrantLock_Thread1"; private static final String FLAG_THREAD_2 = "Reen原创 2020-07-21 01:04:48 · 6933 阅读 · 0 评论 -
Java生产者、消费者模式的几种实现方式
文章目录方式一:BlockingQueue方式(最优方式)方式二:Synchronized+wait/notifyAll方式方式三:ReentrantLock+Condition方式几种方式对比参考方式一:BlockingQueue方式(最优方式)private static final String THREAD_PRODUCE = "生产者";private static final String THREAD_CONSUME = "消费者";//阻塞队列中最多存5个private stati原创 2020-07-21 01:03:08 · 1292 阅读 · 0 评论 -
JUC系列学习(四):线程池阻塞队列BlockingQueue及其相关实现ArrayBlockingQueue、LinkedBlockingQueue
文章目录BlockingQueueBlockingQueue相关实现类ArrayBlockingQueue实现原理构造函数添加元素add/put/offer删除元素remove/take/poll其他操作peek/element等LinkedBlockingQueue实现原理构造函数静态内部类Node添加元素add/put/offer删除元素remove/take/poll其他操作peek/element等ArrayBlockingQueue、LinkedBlockingQueue的异同Synchronou原创 2020-07-21 00:55:18 · 475 阅读 · 0 评论 -
JUC系列学习(五):CountDownLatch、Semaphore、CyclicBarrier的使用及源码解析
文章目录CountDownLatch使用举例源码解析Semaphore使用举例源码解析CyclicBarrier使用举例源码解析总结CountDownLatchCountDownLatch通过计数器实现一个线程等待其他若干线程执行完后,本线程再继续执行的功能。使用举例public static void main(String[] args) throws InterruptedException { //CountDownLatch传入数量n 主线程执行await()后 阻塞等待两个子线程原创 2020-07-21 00:49:27 · 331 阅读 · 0 评论 -
JUC系列学习(六):ReentrantReadWriteLock的使用及源码解析
文章目录ReentrantReadWriteLock的定义使用举例源码解析读锁与写锁的关系ReentrantReadWriteLock的写锁饥饿问题总结参考ReentrantReadWriteLock的定义ReentrantReadWriteLock是一种读写锁,跟ReentrantLock一样也是实现了Lock,区别在于ReentrantLock是独占锁,同一时刻只能有一个线程持有锁,ReentrantLock在某些场景下可能会有并发性能的问题。而ReentrantReadWriteLock是独占锁(原创 2020-07-21 00:43:48 · 420 阅读 · 0 评论 -
JUC系列学习(三):ReentrantLock的使用、源码解析及与Synchronized的异同
文章目录ReentrantLock介绍及使用ReentrantLock源码分析公平锁及非公平锁Synchronized浅析 & ReentrantLock对比ReentrantLock介绍及使用ReentrantLock同Synchronized一样可以实现线程锁的功能,同样具有可重入性,除此之外还可以实现公平锁&非公平锁,其底层是基于AQS框架实现的。主要方法:lock(): 加锁lockInterruptibly():tryLock():tryLock(long time原创 2020-07-21 00:27:23 · 359 阅读 · 0 评论 -
Android中Callable、Future、FutureTask的概念以及几种线程池的使用
个非核心线程,当有任务来时,如果线程池中的线程都处于活动状态,那么会新建线程来执行,否则就会利用空闲线程去执行,空闲线程都会有一个超时机制,超过60秒的空闲线程会被回收。任务队列为空集合,所以所有任务都会被立即执行,核心线程是固定的,非核心线程是不固定的,非核心线程闲置时会被立即回收,主要用于执行定时任务和具有周期性的重复任务。内部只有一个核心线程,所有任务按顺序执行 统一所有任务到一个线程中,使得这些任务不用处理线程同步问题。,但是这两种方式都有一个缺点:在任务执行完成之后没有返回结果,所以在。...原创 2017-07-31 10:40:53 · 4768 阅读 · 0 评论