多线程及并发
介绍进程和线程,线程的状态,hapens-before之类的锁,线程类、线程池及其运行机制。包括:JUC Multithreading and concurrent distribution
loulanyue_
使我有洛阳二尺地,安能配六国将相
展开
-
三个线程按顺序打印ALIALI(LockSupport)
有 3 个独立的线程,一个只会输出 A,一个只会输出 L,一个只会输出 I。在三个线程同时启动的情况下,请用合理的方式让他们按顺序打印 ALIALI。三个线程开始正常输出后,主线程若检测到用户任意的输入则停止三个打印线程的工作,整体退出。private static void printAli() throws InterruptedException { int i = 0; Thread thread1 = new Thread(() -> { while (原创 2021-06-17 20:36:31 · 442 阅读 · 0 评论 -
通过DCL双端检锁机制+volatile禁止指令重排,解决单例模式的线程不安全
一、DCL( double check lock) 双端检锁机制存在指令重排可能使结果不唯一,不一定线程安全,可通过volatile指令解决二、并发多线程下存在问题不加synchronized结果发生改变,直接添加synchronized代码上锁的部分过多,不够灵活三、解决单例模式线程不安全代码示例package com.yfy.multithreading.singleton;/** * @author youfyu * @date 2020/06/28 * 单例模式线程不安全情况下原创 2020-06-28 22:29:22 · 1381 阅读 · 0 评论 -
【线程】Thread深入浅出
一、创建线程的方式(1)继承Thread类(2)实现Runnable接口二、start()方法和run()方法的区别(1)只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。(2)如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码。...转载 2019-07-21 21:06:09 · 170 阅读 · 0 评论 -
并发包下synchronized和lock有哪5大区别
从构成、使用方法、等待中断、加锁公平性、锁唤醒角度区分lock和synchronized原创 2019-07-14 20:28:43 · 124 阅读 · 0 评论 -
阿里代码规约:手动创建线程池,效果会更好哦
规避资源耗尽的风险,高并发下推荐手动创建线程池原创 2019-08-30 21:54:43 · 25199 阅读 · 2 评论 -
并发包下CAS的工作原理,在AtomicInteger的运用
1.比较并交换Compare-And-Swap比较当前工作内存的值和主内存的值,如果相同则只需规定操作,否则继续比较直到内存和工作内存中的值一致为止2.CAS底层原理unsafe是CAS的核心类,由于JAVA方法无法直接访问底层系统,需要通过本地native方法来访问,Unsafe相当于一个后门,基于该类可以直接操作特定内存的数据,直接调用操作系统底层资源执行相应任务private sta...原创 2020-02-29 22:59:44 · 594 阅读 · 0 评论 -
并发编程JUC&&线程状态
并发java.util.concurrent原创 2020-04-23 19:16:11 · 179 阅读 · 0 评论 -
深入理解ForkJoin及使用示例
借鉴大数据里分而治之的思想原创 2020-04-22 21:31:45 · 1320 阅读 · 0 评论 -
多线程下Callable FutureTask接口的应用
并发下带返回值的调用callable原创 2020-04-21 21:03:17 · 158 阅读 · 0 评论 -
阻塞队列常用示例BlockingQueue
心系沧海之阻塞队列BlockingQueue原创 2020-04-20 19:48:40 · 232 阅读 · 0 评论 -
Java8 下CompletableFuture如何实现异步回调
一、CompletableFuture是啥Java 8 引入的CompletableFuture 类,支持 future 完成时触发一些依赖的函数和动作CompletableFuture 实现了 Future 以及 ComplatableStage 接口, 实现 Future 接口代表其本身可以作为生产者和消费者的 “桥梁”, 而 ComplatableStage 接口定义了以上所有的组合条...原创 2020-04-10 19:35:50 · 2703 阅读 · 0 评论 -
JUC中T0级的三大辅助工具类(Semaphore,CountDownLatch,CyclicBarrier)
一、CountDownLatch(减少计数)让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒主要有两个方法,1.1 当一个或多个线程调用await方法时,这些线程会阻塞,其它线程调用countDown方法会将计数器减一(调用countDown方法的线程不会阻塞);1.2 当计数器的值变为0时,await方法阻塞的线程会被唤醒,继续执行示例代码:import java.util.con...原创 2020-04-09 21:33:22 · 238 阅读 · 0 评论 -
使用线程池该注意啥
CPU核心数和线程数的关系核心数:线程数=1:1;超线程技术>1:2CPU时间片轮转机制RR调度 上下文切换 花费5K-2W个周期 浪费20%进程和线程进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源线程:CPU调度的最小单位并行和并发并发:与时间单位相关的,在单位时间内可以处理事情的能力,并发度并行:同一时刻,可以处理事情的能力高并发...原创 2019-09-01 23:57:15 · 208 阅读 · 0 评论 -
JUC下的七大阻塞队列
快速选择用于求解 Kth Element 问题,也就是第 K 个元素的问题。可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。堆用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素。最小堆需要使用大顶堆来实现,大顶堆表示堆顶元素是堆中最大元素...原创 2019-09-16 18:52:52 · 232 阅读 · 0 评论 -
如何理解Java多线程下的CountDownLatch、CyclicBarrier和Semaphore
一、性能性能指标1. 响应时间指某个请求从发出到接收到响应消耗的时间。在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。2. 吞吐量指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。3. 并发用户数指系统能同时处理的并发用户请求数量。在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系统支持的吞吐量为 100 req/s,...原创 2019-09-24 20:14:47 · 105 阅读 · 0 评论 -
如何理解JUC中的公平锁/非公平锁、可重入锁/递归锁、自旋锁、读写锁
数据库命令规范数据库基本设计规范1. 所有表必须使用 Innodb 存储引擎2. 数据库和表的字符集统一使用 UTF83. 所有表和字段都需要添加注释4. 尽量控制单表数据量的大小,建议控制在 500 万以内。5. 谨慎使用 MySQL 分区表6.尽量做到冷热数据分离,减小表的宽度7. 禁止在表中建立预留字段8. 禁止在数据库中存储图片,文件等大的二进制数据9. 禁止在线...原创 2019-08-24 15:45:05 · 144 阅读 · 0 评论 -
不安全的集合类,在多线程下改如何保证安全
斐波那契数列1. 爬楼梯70. Climbing Stairs (Easy)题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步到达,走到第 i 个楼梯的方法数为走到第 i-1 和第 i...原创 2019-09-26 18:54:12 · 178 阅读 · 0 评论 -
CLH同步队列是怎么实现非公平和公平的
环境:SpringBoot 2.1.5 JDK1.8报错提示:Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2020-01-02 19:27:52.299 ERROR 17856 --- [ ...原创 2020-01-02 20:38:05 · 2705 阅读 · 1 评论