Java多线程相关

2020-08-04  本文已影响0人  竖起大拇指

1.线程状态

1.NEW状态

创建了一个Thread对象,并没有处于执行状态,因为没有调用start方法启动该线程,那么此时的状态就是新建状态。

2.Runnable状态

线程对象通过start方法进入runnable状态,启动的线程不一定会立即得到执行,线程的运行与否要看CPU调度,我们把这个中间状态叫可执行状态(RUNNABLE)

3.Running状态

线程一旦获取到CPU,进入运行状态,此时它才真正的执行自己的逻辑代码

4.BLOCKED状态

线程正在等待获取锁

5.TERMINATED状态

是线程的最终状态,在该状态下线程不会在切换到其他任何状态了,代表整个生命周期都结束了。

2.停止线程

interrupted:判断当前线程是否已经中断,会清除状态
isInterrupted:判断线程是否已经中断,不会清除
状态

3.什么是原子操作

不可被中断的一个或一些列操作

4.如何实现原子操作

java中通过锁和循环CAS的方式来实现原子操作。自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止。

6.CAS实现原子操作的三大问题

ABA问题,循环时间长消耗资源大,只能保证一个共享变量的原子操作。

7.什么是ABA

因为CAS需要在操作值的时候,检查值有没有变化,如果没有变化则更新,如果一个值原理是A,变成了B,又变成了A,那么使用CAS进行检测时会发现值没有发生变化,其实是变化过的。
解决:
添加版本号,每次更新的时候追加版本号,A-B-A ->
1A->2B->3A
从jdk1.5开始,Atomic包提供了一个类AtomicStampedReference来解决ABA的问题

8.CAS循环时间长占用资源大问题

加入延时操作?

9.CAS只能保证一个共享变量的原子操作

10.Java并发容器,你知道几个?

ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentLinkedQueue,ConcurrentSkipListMap,ConcurrentSkipListSet,ArrayBlockingQueue,LinkedBlockingQueue,LinkedBlocingDeque,PriorityBlockingQueue,SynchronousQueue.

ConcurrentSkipListMap

ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。
ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表。但是它们之间有以下的区别:
第一:它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。
第二:ConcurrentSkipListMap是通过跳表实现的,而TreeMap是通过红黑树实现的。
但是ConcurrentSkipListMap有几个ConcurrentHashMap不能比拟的优点:
1.ConcurrentSkipListMap的key是有序的。
2.ConcurrentSkipListMap支持更高的并发。也就是在数据量一定的情况下,并发的线程越多,ConcurrentSkipListMap越能体现出他的优势.在非多线程的情况下,应当尽量使用TreeMap。此外对于并发性相对较低的并行程序可以使用Collections.synchronizedSortedMap将TreeMap进行包装,也可以提供较好的效率。对于高并发程序,应当使用ConcurrentSkipListMap,能够提供更高的并发度。

11.Java中原子操作更新基本类型,Atomic包提供了哪几个类?

12.JAVA中原子操作更新数组,Atomic包提供了那几个类?

13.Java中原子操作更新引用类型,Atomic包提供了哪几个分类?

如果原子需要更新多个变量,就需要引用类型了。

上一篇 下一篇

猜你喜欢

热点阅读