![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 60
Al_0922
这个作者很懒,什么都没留下…
展开
-
JAVA锁
公平锁非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比现申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象。 // 无参public ReentrantLock() { sync = new NonfairSync();} // 有参public ReentrantLock(boolean fair) { sync = fair ? new FairSyn原创 2021-07-10 13:18:46 · 166 阅读 · 0 评论 -
饿汉式-懒汉式
饿汉式------立即加载package singleDemo;//饿汉式单例,在类初始化时,已自行初始化public class Hungry { private Hungry(){ } private static Hungry hungry = new Hungry(); //静态工厂方法 public static Hungry getInstance(){ return hungry; } }为什么饿汉原创 2021-07-10 11:08:05 · 96 阅读 · 0 评论 -
线程池的七大参数
1.看一下三大方法的底层源码,都是调用了ThreadPoolExecutor2.来看一下ThreadPoolExecutor底层源码 public ThreadPoolExecutor(int corePoolSize,//核心线程池大小 int maximumPoolSize,//最大核心线程池大小 long keepAliveTime,//超时了没有人调用就会释放原创 2021-07-03 16:05:12 · 1956 阅读 · 0 评论 -
同步队列SynchronousQueue
SynchronousQueueSynchronousQueue没有容量,与其他的 BlockingQueue 不同,SynchronousQueue是一个不会存储元素的BlockingQueue 。每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然。public class Test2 { public static void main(String[] args) { SynchronousQueue queue = new Synchronous原创 2021-07-03 14:02:46 · 93 阅读 · 0 评论 -
阻塞队列BlockingQueue
阻塞队列阻塞:必须要阻塞、不得不阻塞阻塞队列有两个附加操作支持阻塞的插入方法,当队列满时,从队列中插入元素会被阻塞,直至队列不满支持阻塞的移除方法,当队列为空时,获取元素的线程会等待队列变为非空试图从空的队列中获取元素的线程将会被阻塞,直到其他的线程往空队列里插入元素。试图向已满的队列中添加元素的线程将会被阻塞,知道其他线程从已满的队列中移除元素。应用场景常用于生产者与消费者模式中,生产者是向队列里添加元素的线程,消费者是向队列里移除元素的线程。简单来说,阻塞队列是生产者用原创 2021-07-03 13:43:14 · 206 阅读 · 0 评论 -
ReadWriteLock(读写锁)
ReadWriteLock测试public class Test2 { public static void main(String[] args) { MyCache myCache = new MyCache(); //写 for(int i=1;i<=5;i++){ int temp=i; new Thread(()->{ myCache.put(te原创 2021-07-02 21:55:41 · 180 阅读 · 0 评论 -
常用辅助类之Semaphore
Semaphore翻译:Semaphore 信号量;信号灯;信号模拟6个车抢三个车位public class Test2 {/*** 信号灯*/ public static void main(String[] args) { //模拟资源类,有三个停车位 Semaphore semaphore = new Semaphore(3); for (int i=1;i<=6;i++){ new Thread(()转载 2021-07-02 21:20:03 · 81 阅读 · 0 评论 -
常用辅助类之CyclicBarrier
CyclicBarrier翻译:CyclicBarrier 篱栅作用:和上面的减法相反,这里是加法,好比集齐7个龙珠召唤神龙,或者人到齐了再开会!public class Test2 { public static void main(String[] args) { CyclicBarrier cyclicBarrier= new CyclicBarrier(7, new Runnable() { @Override publ原创 2021-07-02 20:45:59 · 103 阅读 · 0 评论 -
常用辅助类之CountDownLatch
CountDownLatch什么是CountDownLatchCountDownLatch是JDK提供的一个同步工具,它可以让一个或多个线程等待,一直等到其他线程中执行完成一组操作。CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下import java.util.concurrent.Co原创 2021-07-02 20:24:37 · 123 阅读 · 0 评论 -
Callable
Callable多线程中,第3种获得多线程的方式,Callable。它与Runnable有什么区别呢?是否有返回值是否抛出异常方法不一样,一个是call,一个是run基础入门package demo4;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class Call原创 2021-07-01 10:26:10 · 87 阅读 · 0 评论 -
集合类不安全
List不安全单线程下://单线程十分安全public class ArrayListTest01 { public static void main(String[] args) { List<String> list = Arrays.asList("a","b","c"); for (String l:list){ System.out.println(l); } }}多线程下://多线程原创 2021-06-30 22:33:05 · 193 阅读 · 0 评论 -
多线程8锁现象
1、标准访问,请问先打印打电话还是发短信?package demo1;/** * 多线程的8锁 * 1、标准访问,请问先打电话还是发短信? */public class Test01 { public static void main(String[] args) { Phone p = new Phone(); new Thread(()->{ p.sendPhone(); },"A").start(.原创 2021-06-30 16:44:27 · 75 阅读 · 0 评论 -
Condition实现精确唤醒通知顺序访问
package demo1;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 题目:多线程之间按顺序调用,实现 A->B->C * 三个线程启动,要求如下: * AA 打印5次,BB 打印10次。CC打印15次,依次循环 * * 重点:标志位 */p原创 2021-06-30 12:56:48 · 235 阅读 · 0 评论 -
生产者和消费者
生产者和消费者synchronized版package demo1;/** * 题目:现在两个线程,可以操作初始值为0的一个变量 * 实现一个线程对该变量 + 1,一个线程对该变量 -1 * 实现交替10次 * * 诀窍: * 1. 高内聚低耦合的前提下,线程操作资源类 * 2. 判断 、干活、通知 */public class Test01 { public原创 2021-06-30 00:38:45 · 85 阅读 · 0 评论 -
Lock锁
传统的synchronized锁/** 题目:三个售票员 卖出 30张票* 多线程编程的企业级套路:* 1. 在高内聚低耦合的前提下, 线程 操作(对外暴露的调用方法) 资源类*/public class Test01 { public static void main(String[] args) { Tickets tickets = new Tickets(); new Thread(new Runnable() {原创 2021-06-29 22:02:39 · 119 阅读 · 0 评论 -
线程的状态,wait()方法和sleep()方法的区别
线程状态从源码上分析,有6中线程状态public enum State { //线程刚创建 NEW, //在JVM中正在运行的线程 RUNNABLE, //线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行 BLOCKED, //等待状态 WAITING, //调用sleep() join() wait()方法可能导致线程处于等待状态。等待超时 TIMED_WAITING, //线程执行完毕,已经退出 TERMINATED;}wait()方法和sleep()方法的原创 2021-06-29 21:31:29 · 834 阅读 · 0 评论 -
初识JUC
什么是JUC?可以查看JDK1.8帮助文档原创 2021-06-29 21:08:17 · 92 阅读 · 0 评论