
JUC
文章平均质量分 70
鸭梨的药丸哥
文耀
展开
-
FutureTask使用
FutureTask使用FutureTask介绍FutureTask 表示一个异步运算的任务。FutureTask 里面可以传入一个 Callable 的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。FutureTask实现接口FutureTask实现了RunnableFuture接口,而接口RunnableFuture继承了Runnable, Future。public class FutureTask<V> implements Runn原创 2021-08-08 18:20:16 · 1458 阅读 · 0 评论 -
JAVA 三种线程实现创建方式
JAVA 三种线程实现/创建方式方式一:继承Thread类通过继承Thread类来创建一个自定义线程类。Thread类本质上就继承了Runable接口,代表一个线程类。启动线程的唯一办法就是通过Thread类的start()实例方法。start()方法是一个 native 方法(本地方法),它将启动一个新线程,并执行 run()方法。public class MyThread extends Thread { //重写父类的run方法,实现自定义线程操作 public void run()原创 2021-04-07 22:53:26 · 185 阅读 · 0 评论 -
Java Semaphore 信号量
Java Semaphore 信号量Semaphore 是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore 可以用来构建一些对象池,资源池之类的,比如数据库连接池。Semaphore通过 acquire()与release()方法来获得和释放临界资源。Semaphore 也提供了公平与非公平锁的机制,也可在构造函数中进行设定使用Semaphore实现互斥锁我们也可以创建计数为 1 的 Sem原创 2021-07-04 20:17:19 · 178 阅读 · 0 评论 -
CyclicBarrier(回环栅栏)
CyclicBarrier(回环栅栏)通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier 可以被重用。我们暂且把这个状态就叫做barrier,当调用 await()方法之后,线程就处于 barrier 了。await()方法的重载public int await():用来挂起当前线程,直至所有线程都到达 barrier 状态再同时执行后续任务;public int await(long timeout, TimeUnit原创 2021-07-04 20:16:03 · 202 阅读 · 0 评论 -
CountDownLatch(线程计数器)
CountDownLatch(线程计数器)CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch来实现这种功能了。特点countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执原创 2021-04-19 11:51:34 · 871 阅读 · 0 评论 -
java线程池
java线程池线程池的组成一般线程池主要分一下部分:线程池管理器:用于创建并管理线程池工作线程:线程池中的线程任务接口:每个任务必须实现的接口,用于工作线程调度其运行任务队列:用于存放待处理的任务,提供一种缓冲机制ThreadPoolExecutor(推荐)ThreadPoolExecutor的构造器public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize, long keepAliveTime,TimeUnit un原创 2021-04-16 21:09:31 · 278 阅读 · 0 评论 -
JUC中的阻塞队列
JUC中的阻塞队列阻塞情况阻塞队列中,线程阻塞有这样的两种情况:当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞,直到有数据放入队列。当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞,直到队列中有空的位置,线程被自动唤醒。如下两图:空的情况满的情况BlockingQueue接口BlockingQueue的主要方法官方提供的方法表格Throws exceptionSpecial valueBlocksTimes outInserta原创 2021-04-16 12:33:40 · 167 阅读 · 0 评论 -
java守护线程和用户线程
java守护线程和用户线程1.Java线程分类Java分两类线程:1.用户线程 2.守护线程2.区别1.JVM在用户线程没有结束前,会一直和守护线程一同运行。2.如果用户线程全部结束,那么JVM会退出,守护线程也会随之结束。3.JVM退不退出完全是看用户线程,如果全部用户线程退出了,不管JVM内是否还剩余守护线程也会退出,不会考虑守护线程是否结束。4.守护线程是为用户线程服务的。...原创 2020-04-17 16:44:53 · 3064 阅读 · 0 评论 -
java线程join方法
java线程join方法1.join方法 join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权。调用join方法的线程的上级线程必须等待调用join方法的线程执行完成才能继续执行。举个小例子:public class testjoin{ public static void main(String[] args) throws I...原创 2020-04-16 23:04:39 · 5618 阅读 · 0 评论 -
java线程礼让yield
java线程礼让yield1.yield方法 使用Thread类的静态方法yield可以对当前线程进行礼让,yield方法使线程从运行状态转换到就绪状态,这与sleep方法对比,sleep是使线程从运行状态进入阻塞状态。现在给出代码便于理解:public class testyield implements Runnable{ public static void main(St...原创 2020-04-16 17:14:51 · 2981 阅读 · 0 评论 -
Java锁优化
Java锁优化锁优化可以重这5个方面:减少锁的持有时间减小锁粒度锁分离锁粗化锁消除减少锁的持有时间只用在有线程安全要求的程序上加锁。如:public synchronized void syncMethod(){ //一些其他操作 ... //访问共享资源开始 mutextMethod(); //访问共享资源开始 //一些其他操作 ...}public原创 2021-04-11 21:18:46 · 301 阅读 · 1 评论 -
ReentrantLock
ReentrantLock学习ReentrantLock之前建议去看,Java锁这些基础知识和synchronized的原理。当然有操作系统的基础就更好了。 ReentantLock 实现接口 Lock ,并实现了接口中定义的方法,他是一种可重入锁,除了能完成 synchronized 所能完成的所有工作外,还提供了: 可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的方法。ReentrantLock故名思意就是可重入锁。Lock接口实现方法void lock(): 执行此方法时, 如果锁原创 2021-04-11 16:25:28 · 260 阅读 · 0 评论 -
JAVA锁
JAVA锁文章目录JAVA锁乐观锁悲观锁自旋锁公平锁和非公平锁公平锁非公平锁可重入锁 VS 非可重入锁可重入锁非可重入锁独享锁 VS 共享锁独享锁共享锁四种锁状态Java的对象头和对象组成Java对象Java对象头Mark Word无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁参考博客:https://www.cnblogs.com/jyroy/p/11365935.html.极度建议去看参考博客,这个文章写得很棒(๑•̀ㅂ•́)و✧,基本是我见过所有解析java锁最全面原创 2021-04-11 00:43:15 · 509 阅读 · 0 评论 -
Synchronized同步锁
Synchronized同步锁JAVA锁乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低, 每次去拿数据的时候都认为别人不会修改,所以不会上锁。 但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作。悲观锁悲观锁是就是悲观思想,与乐观锁相反,即认为写多,遇到并发写的可能性高,每次去拿数据的时候都认为别人会修改,所以 每次在读写数据的时候都会上锁 ,这样别人想读写这个数据就会 block 直到拿到锁。自旋锁如果持有锁的线程能在很短时原创 2021-04-09 12:33:33 · 415 阅读 · 1 评论