多线程

1.什么是指令重排序

编译器会为了提高性能对指令会进行自动重排序,但是有依赖关系的数据不会去添加,volatile也可以用来保证不会重排序和可见性。

2.单例模型既然已经用了synchronized,为什么还要在加volatile?

因为synchronized保证只有一个线程执行,volatile保证其中的多部操作不会进行重排序

3.多线程要考虑哪些问题

alt text

保证数据的一致性有哪些方案呢?

alt text

如何实现一个线程

1.继承thread类 2.实现runnable接口 3.实现Callable接口与FutureTask
4.线程池、

如何停止线程运行

1.retunr 2.异常 3.stop 4.sleep

线程的六种状态

alt text

如何保证线程安全

synchronized,volatile,Lock接口和ReentrantLock类,线程局部变量:ThreadLoca

实现锁的几种方法

synchronized 2.Lock接口 3reentrantlock
reentrantlock和synchronized区别:
sy:通过一个队列和一个可重入锁的值去判断
reen:可中断性,是基于aqs这个抽象类实现的。可以设置超时时间,可以实现公平锁和非公平锁,

产生死锁的几种可能性

资源独占以及不可剥夺,循环依赖,资源不能同时被享用。

介绍线程池概念

逻辑判断:
alt text
alt text
拒绝策略
alt text
非核心的线程会建立后销毁,如果阻塞队列没满,会添加到阻塞队列后等待核心线程去执行。
alt text
alt text

posted @ 2025-03-12 21:29    阅读(15)  评论(0)    收藏  举报