JUC
文章平均质量分 62
韭菜盖饭
一名自学爪哇的小学生
展开
-
JUC学习------异步回调
文章预览前言Demo前言FutureFutures是一个抽象的概念,它表示一个值,该值可能在某一点变得可用。一个Future要么获得计算完的结果,要么获得计算失败后的异常。Java在java.util.concurrent包中附带了Future接口,它使用Executor异步执行。例如下面的代码,每传递一个Runnable对象到ExecutorService.submit()方法就会得到一个回调的Future,你能使用它检测是否执行,这种方法可以是同步等待线处理结果完成。Completable原创 2022-01-22 17:56:19 · 125 阅读 · 0 评论 -
JUC学习------Fork/Join框架
文章预览前言例子前言什么是Fork/Join框架? Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情:1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割2.执行任务并合并结果:分割的子任务分别放到双端队列里,然后几个启动线程分别从双端队列里获取任务执行。子任务执行完的结果都放在另外一个队列里原创 2022-01-22 17:44:14 · 106 阅读 · 0 评论 -
JUC学习------线程池的基本使用以及自定义线程池
文章预览前言线程池原理剖析一、使用默认方法创建线程池二、自定义线程池前言线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可原创 2022-01-22 17:16:24 · 460 阅读 · 0 评论 -
JUC学习------阻塞队列
文章预览前言一、阻塞队列类型1.1、ArrayBlockingQueue1.2、LinkedBlockingQueue1.3、PriorityBlockingQueue1.4、SynchronousQueue1.5、DelayQueue1.6、LinkedBlockingDeque1.7、LinkedTransferQueue二、ArrayBlockingQueue常用方法三、LinkedBlockingQueue 常用方法前言阻塞队列BlockingQueue是一个支持两个附加操作的队列。提供了一些阻原创 2022-01-22 16:23:15 · 839 阅读 · 0 评论 -
JUC学习------读写锁
文章预览前言一、读写锁Demo1.1、未加读写锁1.2、加读写锁二、读写锁的降级2.1、读写锁Demo前言什么是读写锁?读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。读写锁分为三种状态1,以读的方式占据锁的状态。此时,如果有另外线程请求以读的方式占据锁,那么不会阻塞,可以再次占据。如果有另外线程请求以写的方式占据锁,那么会阻塞,直到以读的方式占据锁的线程释放锁。特别的,如果某线程以读方式占据锁后,既有线程请原创 2022-01-22 15:36:47 · 114 阅读 · 0 评论 -
JUC学习------Callable和Runnable创建线程
文章预览前言一、Runnable创建线程一、Callable创建线程前言Callable和Runnable接口都是创建线程的实现 Callable 接口。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。 FutureTask 是 Future 接口的实现类FutureTask的详细介绍可以看这篇文章https://blog.csdn.net/qq_39654841/art原创 2022-01-20 11:30:54 · 111 阅读 · 0 评论 -
JUC学习------死锁
文章预览前言死锁示例验证死锁前言什么是死锁?死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁示例package com.juc;import org.omg.CORBA.TIMEOUT;import java.util.concurrent.TimeUnit;/** * @author niuben */public原创 2022-01-20 10:58:20 · 91 阅读 · 0 评论 -
JUC学习------解决集合的线程不安全问题
文章预览前言一、ArrayList解决线程安全一、HashSet解决线程安全一、HashMap解决线程安全前言什么是线程不安全及其具体解析https://blog.csdn.net/shadow___h/article/details/111461834解决集合的线程不安全问题,主要是用到写时复制技术一、ArrayList解决线程安全核心代码List list = new CopyOnWriteArrayList<>();package com.juc;import java原创 2022-01-19 17:42:44 · 2757 阅读 · 0 评论 -
JUC学习------Lock实现线程间定制化通信
文章预览前言案例前言定制化通信就是多个线程根据自己的意愿按照顺序执行这里主要用到Lock中Condition的signal()signal()就是通知某个线程可以开始执行了案例三个线程按照顺序进行10轮的不同次数的输出C1先执行,输出5次C2再执行,输出10次C3最后执行,输出15次主要是添加一个标志位来区分不同的线程,从而使不同的线程按照顺序执行代码如下package com.juc;import java.util.concurrent.locks.Condition;imp原创 2022-01-19 17:02:09 · 312 阅读 · 0 评论 -
JUC学习------Lock实现线程之间的通信
文章预览前言案例注意前言前面已经了解了Synchronized实现线程之间的通信,使用关键字synchronized与wait()方法和notify()方式结合实现线程间通信,也就是等待/通知模式。在ReentrantLock中,是借助Condition对象进行实现的。下面对Lock实现线程之间的通信进行分析Condition的创建方式如下:Lock lock = new ReentrantLock();Condition condition = lock.newCondition();Con原创 2022-01-19 16:29:54 · 563 阅读 · 0 评论 -
JUC学习------Synchronized实现线程之间的通信
文章预览前言一、案例注意前言Synchronized实现线程之间的通信主要使用notify()和wait()方法 wait()和notify()都是定义在Object类中,为什么如此设计。因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()和notify(),并且只有同一把锁才能对线程进行操作,不同锁之间是不可以相互操作的,所以wait和notify属于Objectnotify()notify()唤醒等待的线程,如果监视器种只有一个等待线程,使用notif原创 2022-01-19 16:00:25 · 305 阅读 · 0 评论 -
JUC学习------Synchronized与Lock
前言JUC概念java.util.concurrent在并发编程中使用的工具类,专门用于多线程的开发synchronized与Lock的区别Thread的几个重要方法。a、start()方法,调用该方法开始执行该线程;b、stop()方法,调用该方法强制结束该线程执行;c、join()方法,调用该方法等待该线程结束。d、sleep()方法,调用该方法该线程进入等待。e、run()方法,调用该方法直接执行线程的run()方法,但是线程调用start()方法时也会运行run()方法,区别就是一原创 2022-01-19 12:32:49 · 293 阅读 · 0 评论