Yui Help

并发

java.util.concurrent

信号量 Semaphore

一、概念

控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源

二、使用场景

资源有明确访问数量限制的场景,常用于限流

三、常用方法

Synchronized

锁分类

  1. 重量级锁:jdk1.6之前仅有重量级锁

  2. 偏向锁 -> 轻量级锁 -> 重量级锁

  3. 使用

    1. 偏向锁

      1. 每次只有一个线程去拿锁,且是同一个线程,相当于单线程环境,可以使用偏向锁

      2. 没有线程的竞争

      3. 第一次会标记,之后只进行比较线程即可

    2. 轻量级锁

      1. 有锁的竞争,但竞争不是很激烈

      2. 多个线程交替执行

      3. 使用CAS,自旋来获取锁

    3. 重量级锁

      1. 线程竞争激烈,多个线程都要去获取锁

      2. 操作系统底层对锁的互斥

      3. 性能差一些

public class Test { public static void main(String[] args) { //Main main = new Main(); new Thread(()->{ Main main = new Main(); main.get(); }).start(); new Thread(()->{ Main main = new Main(); main.get(); }).start(); } } class Main{ private static int i = 0; public synchronized void get(){ i++; System.out.println(i); } }

java.lang

ThreadLocal

image
image
Last modified: 28 十一月 2023