![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
文章平均质量分 71
李不烦
这个作者很懒,什么都没留下…
展开
-
ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor实现了按时间调度来执行任务:1. 延迟执行任务2. 周期执行任务区别如下:scheduleAtFixedRatescheduleAtFixedRate:按固定频率执行,与任务本身执行时间无关。但有个前提条件,任务执行时间必须小于间隔时间,例如间隔时间是5s,每5s执行一次任务,任务的执行时间必须小于5s。scheduleWithFixedDelay:按固定间隔执行,与任务本身执行时间有关。例如,任务本身执行时间是10s,间.原创 2021-05-03 21:13:30 · 188 阅读 · 0 评论 -
Executors工具类
concurrent包提供了Executors工具类,利用它可以创建各种不同类型的线程池。单线程的线程池:固定数目线程的线程池:每接收一个请求,就创建一个线程来执行:单线程具有周期调度功能的线程池:多线程,有调度功能的线程池:不同类型的线程池,其实都是由前面的几个关键配置参数配置而成的。在《阿里巴巴Java开发手册》中,明确禁止使用Executors创建线程池,并要求开发者直接使用ThreadPoolExector或ScheduledThreadPo..原创 2021-05-03 20:16:37 · 166 阅读 · 0 评论 -
线程池的4种拒绝策略
RejectedExecutionHandler 是一个接口,定义了四种实现,分别对应四种不同的拒绝策略,默认是AbortPolicy。ThreadPoolExecutor类中默认的实现是:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTim...原创 2021-05-03 20:02:29 · 440 阅读 · 0 评论 -
线程池2--任务的提交过程分析
任务的提交过程分析threadPoolExecutor.execute(runnable);public void execute(Runnable command) { if (command == null) throw new NullPointerException(); /* * Proceed in 3 steps: * * 1. If fewer than corePo...原创 2021-05-03 17:16:09 · 179 阅读 · 0 评论 -
线程池1-配置参数 线程池的优雅关闭
目录1ThreadPoolExecutor核心数据结构核心配置参数解释线程池的优雅关闭1.线程池的生命周期2.正确关闭线程池的步骤3.shutdown()与shutdownNow()的区别shutdown()shutdownNow()1ThreadPoolExecutor核心数据结构public class ThreadPoolExecutor extends AbstractExecutorService { //线程池控制状...原创 2021-05-02 16:03:59 · 243 阅读 · 0 评论 -
并发编程AQS ReentrantLock
Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,且它为独占式在高并发场景下性能大打折扣。如何自己来实现一个同步自旋实现一个同步volatile int status=0;//标识--.原创 2021-05-01 22:45:47 · 121 阅读 · 0 评论 -
Java并发之AQS详解
一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。 以下是本文的目录大纲: 概述 框架 源码详解 简单应用 若有不正之处,请谅解和批评指正,不胜感激。 请翻译 2021-05-01 22:24:40 · 103 阅读 · 0 评论 -
同步工具--CyclicBarrier
1. CyclicBarrier 是什么?CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier),它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法。白话讲CountDownLatch是减法倒计时,CyclicBarrier是加法,比如人员开会,一共有7个人,只有7个人都到了才能开会。该类用于协调多个线程同步执行原创 2021-04-30 16:45:28 · 148 阅读 · 1 评论 -
并发容器--LinkedBlockingQueue
1、LinkedBlockingQueue数据结构LinkedBlockingQueue是一种基于单向链表的阻塞队列。其数据结构如下,包含了头结点和尾节点。2、LinkedBlockingQueue源码分析类的继承关系public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializ...原创 2021-04-30 11:47:43 · 637 阅读 · 0 评论 -
同步工具类 Semaphore
1、SemaphoreSemaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。方法Semaphore的主要方法摘要: Semaphore myResources = new Semaphore(5, true); // 一开始有5份共享资源。第二个参数表示是否是公平 void acquire():从此信号量获取一个许可,在提...原创 2021-04-30 00:55:10 · 143 阅读 · 0 评论 -
CopyOnWrite、CopyOnWriteArrayList
CopyOnWrite指在“写”的时候,不是直接“写”源数据,而是把数据拷贝一份进行修改,再通过悲观锁或者乐观锁的方式写回。那为什么不直接修改,而是要拷贝一份修改呢?答:这是为了在“读”的时候不加锁。CopyOnWriteArrayList和ArrayList一样,CopyOnWriteArrayList的核心数据结构也是一个数组,代码如下:public class CopyOnWriteArrayList<E> implements List<E>, Rand原创 2021-04-29 23:53:26 · 189 阅读 · 0 评论 -
并发容器 ArrayBlockingQueue
目录BlockingQueueArrayBlockingQueueBlockingQueue在所有的并发容器中,BlockingQueue是最常见的一种。BlockingQueue是一个带阻塞功能的队列,当入队列时,若队列已满,则阻塞调用者;当出队列时,若队列为空,则阻塞调用者。在Concurrent包中,BlockingQueue是一个接口,有许多个不同的实现类,如图所示。该接口的定义如下:public interface BlockingQueue<...原创 2021-04-29 23:31:24 · 157 阅读 · 0 评论 -
daemon线程和非daemon线程的对比:
当在一个JVM进程里面开多个线程时,这些线程被分成两类:守护线程和非守护线程。默认都是非守护线程。在Java中有一个规定:当所有的非守护线程退出后,整个JVM进程就会退出。意思就是守护线程“不算作数”,守护线程不影响整个 JVM 进程的退出。例如,垃圾回收线程就是守护线程,它们在后台默默工作,当开发者的所有前台线程(非守护线程)都退出之后,整个JVM进程就退出了。对于下面的程序,在thread.start()前面加一行代码thread.setDaemon(true)。当main(...)..原创 2021-04-29 21:09:37 · 587 阅读 · 0 评论 -
线程中断 interrupt
Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己。每个线程都有一个boolean的中断状态(这个状态不在Thread的属性上),interrupt方法仅仅只是将该状态置为true。比如对正常运行的线程调用interrupt()并不能终止他,只是改变了interrupt标示符。interrupt() 它基于「一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。」思想,是一个比较温柔的...原创 2021-04-29 21:07:24 · 2526 阅读 · 1 评论 -
为什么wait,notify和notifyAll要与synchronized一起使用?为什么要放在Object类里面
目录为什么wait,notify和notifyAll要与synchronized一起使用?wait()和notify()是Object的成员函数,是基础中的基础。为什么Java要把wait()和notify()放在如此基础的类里面,而不是作为像Thread一类的成员函数,或者其他类的成员函数呢?为什么wait,notify和notifyAll要与synchronized一起使用?Object.wait(),Object.notify(),Object.notifyAll()都是Obje.原创 2021-04-26 14:45:30 · 255 阅读 · 1 评论 -
线程-2 Java线程实现的四种方式
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用四种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程4)使用线程池例如用Executor框架下面让我们分别来看看这四种创建线程的方法。1、继承Thread类创建线程Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的s.原创 2021-04-25 23:05:56 · 137 阅读 · 0 评论 -
线程1-介绍、6种状态
一.线程与进程1.线程与进程程序(program):是为了完成特定任务、用某种语言编写的一组指令的集合,是一段静态的代码。(程序是静态的)进程(process):是程序的一次执行过程。正在运行的一个程序,进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域。进程是动态的,是一个动的过程,有它自身的产生、存在和消亡的过程。线程(thread):进程可以进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程。2.原创 2021-04-25 21:57:01 · 160 阅读 · 0 评论 -
synchronize的理解1
线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。synchrozene是一个关键字。synchrozene用来处理多线程环境下, 线程同步的问题,保证数据的准确性 。...原创 2021-04-18 21:15:41 · 317 阅读 · 0 评论 -
线程拒绝策略
https://blog.csdn.net/qq_25806863/article/details/71172823原创 2020-07-21 18:00:53 · 110 阅读 · 0 评论