首页 > 其他分享 >juc复习(下篇)(10.31)

juc复习(下篇)(10.31)

时间:2024-10-31 18:45:04浏览次数:3  
标签:juc 下篇 10.31 队列 阻塞 threadPool 线程 new ThreadPoolExecutor

juc复习(10.31)

阻塞队列

写入:如果队列满了,就必须阻塞等待

读取:如果队列是空的,必须阻塞等待生产

使用阻塞队列的情况

多线程并发处理,线程池

四组API
方式抛出异常有返回值不抛出异常阻塞等待超时等待
添加addofferputoffer(3个参数)
移除removepolltakepoll(两个参数)
检测队首元素elementpeek--
SynchronousQueue同步队列

没有容量

进去一个元素,必须等待取出来之后才能再往里放一个元素

  • 同步队列

  • 和其他的BlockingQueue 不一样, SynchronousQueue 不存储元素

  • put了一个元素,必须从里面先take取出来,否则不能在put进去值!

线程池

池化技术

事先准备好一些资源,用则拿走,用完则还

优化资源的使用,创建,销毁十分浪费资源

线程池的好处:

1、降低资源的消耗

2、提高响应的速度

3、方便管理。 线程复用、可以控制最大并发数、管理线程

三大方法

Executors 工具类、3大方法

ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线 程

ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一 个固定的线程池的大小

ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩 的

使用了线程池之后,使用线程池来创建线程

threadPool.execute()

线程池用完,程序结束,关闭线程池

threadPool.shutdown();

7大参数

ThreadPoolExecutor(

int corePoolSize, // 核心线程池大小

int maximumPoolSize, // 最大核心线程池大小

long keepAliveTime, // 超时了没有人调用就会释放

TimeUnit unit, // 超时单位

BlockingQueue<Runnable> workQueue, // 阻塞队列

ThreadFactory threadFactory, // 线程工厂:创建线程的,一般不用动

RejectedExecutionHandler handle // 拒绝策略

)

ExecutorService threadPool = new ThreadPoolExecutor(七大参数)

threadPool.execute()

threadPool.shutdown()

四种拒绝策略

  • new ThreadPoolExecutor.AbortPolicy() // 抛出异常

  • new ThreadPoolExecutor.CallerRunsPolicy() // 调用者处理

  • new ThreadPoolExecutor.DiscardPolicy() //队列满了,丢掉任务,不会抛出异常!

  • new ThreadPoolExecutor.DiscardOldestPolicy() //队列满了,尝试去和最早的竞争,也不会抛出异常

函数式接口

只有一个方法的接口

Function<参数类型,返回值类型> function = (参数)->{return 返回值;};

Predicate<参数类型> predicate = (参数)->{return 布尔类型; };

Consumer<参数类型> consumer = (参数)->{return;};

Supplier supplier = ()->{ return 返回值; };

ForkJoin

并行执行任务

ForkJoin 特点:工作窃取

双端队列

JMM

Java内存模型,抽象概念

Volatile 是 Java 虚拟机提供轻量级的同步机制

1、保证可见性 2、不保证原子性 3、禁止指令重排

关于JMM的一些同步的约定

1、线程解锁前,必须把共享变量立刻刷回主存。

2、线程加锁前,必须读取主存中的最新值到工作内存中

3、加锁和解锁是同一把锁

volatile可以避免指令重排

1、保证特定的操作的执行顺序

2、可以保证某些变量的内存可见性

Volatile 是可以保持可见性不能保证原子性

由于内存屏障可以保证避免指令重排的现象产生

标签:juc,下篇,10.31,队列,阻塞,threadPool,线程,new,ThreadPoolExecutor
From: https://blog.csdn.net/m0_62261710/article/details/143403474

相关文章

  • 2024.10.31模拟赛
    一定要好好睡觉啊,不然打模拟赛的时候会困死的!!!非常非常困的7:50时就开始打模拟赛,还是打了四个小时。打了T1、T2的正解,T3的5分特殊样例、T3的10分特殊样例,预计总215分。然后经过漫长的三个小时的等待,出现了T1100分,T265分,T360分,T410分、总分235分的神奇成绩。虽然结果比预......
  • 2024.10.31总结
    本文于github同步更新。最后一天喽A:卡双模哈希......
  • 杂题随笔 10.31 两道LIS相关的题
    https://www.luogu.com.cn/problem/AT_abc354_f题意:给定一个序列a,求出所有的i使得任意一个a的最长子序列包含i。解法:我们先求这个序列的LIS的长度maxx,然后再去正着求一遍最长上升子序列和反着求一遍最长下降子序列即可,如果拼起来等于maxx那么说明i这个点是满足要求的点。注意细......
  • JUC并发编程1
    JUC并发编程1.常见的加锁方式1.1synchronized关键字要求:多个线程并行执行,依次实现对数字的+1、-1操作。即一次+1、一次-1,依次执行。Share类classShare{privateintnumber=0;publicsynchronizedvoidincr()throwsInterruptedException{//......
  • 尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记
    #1024程序员节|征文# public/index.html<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>redux</title></head><body><divid="root"><......
  • Lua语法基础教程(下篇)
    今天我们继续学习Lua语法基础教程,下篇。九、函数9.1初识函数函数是指一段在一起的、可以做某一件事儿的程序,也叫做子程序。在前面的内容中,我们已经接触过了函数的调用,这个函数就是前面用到了很多次的print(...)。调用函数只需要按下面的格式即可:函数名(参数1,参数2,参数3,.......
  • 你了解JUC吗
    1.什么是JUC1.1JUC简介JUC(JavaUtilConcurrent)是Java中的一个并发工具包,提供了一系列用于多线程编程的类和接口,旨在简化并发编程并提高其效率和可维护性。JUC库包含了许多强大的工具和机制,用于线程管理、同步和协调。1.2并发与并行并发和并行的区别1.并发早期计算......
  • 【优选算法】——滑动窗口(下篇)
    目录1、水果成篮2、找到字符串中所有字母异位词3、串联所有单词的子串4、最小覆盖子串1、水果成篮你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果......
  • Java-继承与多态-下篇
    ......
  • 【JVM神秘大门】Java虚拟机原理保姆式教学,零基础速成GC机制(下篇)
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......