目录 01.Java和线程 02.Java与协程 03.CPU缓存结构和java内存模型 04.管程-悲观锁和锁优化 05.乐观锁 - 无锁方案 06.线程安全 07.线程池 08.JUC 09.高并发测试 10.类加载器 Java与线程 线程的类型 线程是比进程更轻量级的调度执行单位,线程的引入, ...
分类:
编程语言 时间:
2020-06-26 18:45:04
阅读次数:
72
无锁 乐观锁(非阻塞) 共享模式之无锁 CAS 与 volatile 原子整数 原子引用 原子累加器 Unsafe CAS无锁方案 CAS无锁主要看重三个变量: 预估值 + 修改值 + 主存值 预估值: 主要用来判断是否等于主存值, 是则将修改值修改到主存值中 修改值: 即将需要修改的新值, 修改到 ...
分类:
其他好文 时间:
2020-06-26 18:28:48
阅读次数:
57
一、前言 锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁,但是在JDK 1.6后,Jvm为了提高锁的获取与释放效率对(synchron ...
分类:
其他好文 时间:
2020-06-11 16:33:29
阅读次数:
687
锁升级: 无锁——偏向锁——轻量级锁——重量级锁 锁降级很难发生,条件很苛刻。 锁的比较 锁变化流程: ...
分类:
其他好文 时间:
2020-06-09 16:59:40
阅读次数:
43
一、并发编程的挑战 并发编程的挑战 多线程程序不一定运行的比单线程快: (1)上下文切换 任务从保存到再加载的过程就是一次上下文切换; 减少上下文切换的方法:无锁并发编程、CAS算法、使用最少线程和使用协程。 a、无锁并发编程:多线程会竞争锁会引起上下文切换,因此使用无锁并发编程,可以避免上下文切换 ...
分类:
其他好文 时间:
2020-06-09 16:36:45
阅读次数:
76
自己写了一个基于Java的SDK。本机Mac Pro 2018。服务器 百度云4c8g 1Mbps 本机的SDK基于Google Conscrypt,签名操作可以轻松上到1000tps 几点注意点如下 1. SDK无锁发送提案之后,对服务器的压力可以大幅提升,所以SDK客户端需要做限流。 2.服务器 ...
分类:
其他好文 时间:
2020-06-08 00:45:14
阅读次数:
130
前言 在并发编程中,如果要想保证共享数据的安全性,我们一般都需要加锁。但是加锁会使得程序效率明显降低。 在java.util.concurrent.atomic包下,JDK中就为我们提供了使用CAS算法的无锁的原子操作类,可以提高并发编程程序的效率。 这些原子操作类的CAS算法都是利用Unsafe提 ...
分类:
其他好文 时间:
2020-05-11 23:29:07
阅读次数:
71
一个小伙伴最近参加某一线互联网公司的面试,被问到了一些并发相关的问题,看看大家能否答出来: (1)synchronized的CPU原语级别是如何实现的? (2)无锁、偏向锁、轻量级锁、重量级锁有什么差别,升级过程如何? (3)线程间通信,同机器进程间通信,跨机器进程间通信,各有什么方法? (4)下列 ...
分类:
其他好文 时间:
2020-05-11 20:32:35
阅读次数:
164
什么是CAS CAS (compareAndSwap),中文叫比较交换,一种无锁原子算法。 过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。 仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程 ...
分类:
其他好文 时间:
2020-05-08 23:15:08
阅读次数:
119
[TOC] 一般解决多线程问题,有以下几种解决方式: 1. Semaphore(信号量) 2. Lock(管程模型),无锁 3. CountDownLatch(计数器) 4. CyclicBarrier(循环栅栏) Semaphore(信号量) Semaphore主要用于控制当前活动线程数目,就如同 ...
分类:
编程语言 时间:
2020-05-03 20:34:24
阅读次数:
64