并发
java.util.concurrent
信号量 Semaphore
一、概念
控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源
二、使用场景
资源有明确访问数量限制的场景,常用于限流
三、常用方法
锁
Synchronized
锁分类
重量级锁:jdk1.6之前仅有重量级锁
偏向锁 -> 轻量级锁 -> 重量级锁
使用
偏向锁
每次只有一个线程去拿锁,且是同一个线程,相当于单线程环境,可以使用偏向锁
没有线程的竞争
第一次会标记,之后只进行比较线程即可
轻量级锁
有锁的竞争,但竞争不是很激烈
多个线程交替执行
使用CAS,自旋来获取锁
重量级锁
线程竞争激烈,多个线程都要去获取锁
操作系统底层对锁的互斥
性能差一些
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


Last modified: 28 十一月 2023