![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 85
诛仙89
11111
展开
-
线程池
精彩文章原创 2021-02-05 15:01:54 · 88 阅读 · 0 评论 -
【java线程】锁的优化
一、是否选择锁如果不存在多个线程操作共享变量,那么根本就无需锁二、是否可以选择ThreadLocal如果能用这个类解决,那么首先考虑这个。使用场景三、乐观锁乐观锁的核心就是自旋。现在很多类都是这个机制,AtomicXXX类的基本都是乐观锁的实现。他的适用场景是锁的竞争不是很激烈的情况。四、Synchronize可重入锁这类锁会导致线程从用户态切换到内核态,所以是重量级锁。但是自从1.5之后synchronize关键字已经优化了好多,现在基本和ReentrentLock性能一致4.1 Syn翻译 2020-12-29 13:41:50 · 99 阅读 · 0 评论 -
【java线程】线程模型JMM
一、现代计算机读写模型现代计算机中,CPU高速发展,内存已经跟不上了,但是CPU还是要和内存打交道,这样内存就成为了瓶颈,这个时候为了解决这个问题出现了一个中间人:CPU高速缓存在内存中有一个变量a-0; 如果有多个CPU,那么每个cpu都有自己的高速缓存,当都读取变量a时,变量a会存在每个cpu的高速缓存中。这就会产生缓存一致性的问题,现在流行的解决方案是MESI:一篇不错的博客二、线程分类2个重要概念:用户空间和内核空间一个进程只能运行 在用户方式(usermode)或内核方式(kernel原创 2020-12-28 16:08:00 · 143 阅读 · 0 评论 -
AQS(AbstractQueuedSynchronizer)源码分析
一、LockSupport这个是AQS底层调用最频繁的类,这个类有两个重要的方法park:出于线程调度的考虑,禁用(暂停)当前线程,只要有许可可用unpark:为给定的线程提供许可证,这样给定线程就会变得可用。这两个方法都是调用的本地方法来实现的public static void park() { UNSAFE.park(false, 0L);}public static void unpark(Thread thread) { if (thread != n原创 2020-05-27 16:30:04 · 153 阅读 · 0 评论 -
CountDownLatch
这个采用的也是类似ReentrantLock中的AQS机制,CountDownLatch是让部分线程去等待其他线程执行完,然后再次去执行部分线程。也就是说,线程之前存在了因果关系,一部分线程的执行需要等待另外一部分线程的完成(也不能说是完成,可以说是另外一部分线程达到某种预期的结果后,大部分情况是线程的完成)。其实waitnotifyAll机制也是这样的,某些线程先进入wait状...原创 2019-03-13 17:10:08 · 585 阅读 · 0 评论 -
Spring5之Webflux(待完成)
(待完成)原创 2019-03-18 11:20:13 · 148 阅读 · 0 评论 -
java8之stream常见方法
(待完成)原创 2019-03-18 11:18:28 · 240 阅读 · 0 评论 -
java8之CompletableFuture
一、背景JDK1.5中对线程获取结果进行了很大的优化,具体可以参考我以前的博客戳这里,但是针对多线程结果其实还是通过无限循环,或者 阻塞的方式来获取的,很不友好,比如Rxjava已经实现了利用观察者模式,完成后通过回调来获取结果。所以在jdk1.8中增加了类CompletableFuture来对Future进行增强。二、简单实用2.1、创建异步应用CompletableFuture.sup...原创 2019-03-17 21:40:02 · 660 阅读 · 0 评论 -
RxJava2.0
其中有一篇博客写的很精彩戳这里一、背景无论是java8的CompletableFuture还是RxJava都是基于观察者模式的。只不过Rxjava更强大,有更好的错误处理、中断机制、完成状态二、创建Observable ( 被观察者 ) / Observer ( 观察者 )Flowable (被观察者)/ Subscriber (观察者) 【支持回压】package com.hfv...原创 2019-03-20 17:27:37 · 386 阅读 · 0 评论 -
响应式编程
该文参考点这里一、背景最近看spring boot的时候,看到了Spring5.0支持Webflux,这个对我算是一个比较新鲜的东西。从这里面了解到一种新的编成思想Reactive 编程Reactive 编程: 一种异步编程的示范,这种示范与数据流式处理以及变化传播相关联,同时也经常被面向对象语言表示,作为一种观察者模式的扩展。目前实现该编成的有三种:Reactor(webflux...翻译 2019-03-15 17:21:45 · 132 阅读 · 0 评论 -
【转】synchronized与volatile多线程的可见性和原子性
转载地址:synchronized和volatile的可见行和原子性(1)Synchronized:保证可见性和原子性Synchronized能够实现原子性和可见性;在Java内存模型中,synchronized规定,线程在加锁时,先清空工作内存→在主内存中拷贝最新变量的副本到工作内存→执行完代码→将更改后的共享变量的值刷新到主内存中→释放互斥锁。(2)Volatile:保证可见性,但不保证...转载 2019-03-04 16:07:46 · 194 阅读 · 0 评论 -
java ConcurrentHashMap
这里推荐一遍文章ConcurrentHashMap写的非常好。产生原因就行atomicLong出现肯定有他的原因,ConcurrentHashMap出现也是有他的原因,都知道HashMap是线程不安全的,HashTable是线程安全的,既然有个hashTable,为什么还要ConcurrentHashMap呢?HashTable是线程安全的。但是HashTable线程安全的策略实现代价却太大...翻译 2018-12-21 15:51:24 · 103 阅读 · 0 评论 -
java AtomicLong原理解析
【转+原创】 AtomicLong原理解析一 锁的机制自从1.5后引入了Atomic+数据类型的类,具体在package java.util.concurrent.atomic包中,通过包名concurrent可以猜到,这个是线程安全的,既然线程安全可以用synchronized来解决,为什么还需要这些类呢?乐观锁与悲观锁独占锁是一种悲观锁,synchronized就是一种独占锁,它假设...翻译 2018-12-21 15:31:29 · 1147 阅读 · 0 评论 -
java多线程编程历史演变【截止到jdk8】
最近看了咕泡学视频教程,这里算是做一个记录。一、JDK1.5之前时代创建线程的方式继承threadpackage study.java5;/** * @Auther: zhw * @Date: 2018/10/28 11:16 * @Description: 1.5多线程方式1 */public class ThreadDemo { public static vo...原创 2018-10-28 18:54:09 · 379 阅读 · 0 评论