美文网首页
Java多线程相关

Java多线程相关

作者: 竖起大拇指 | 来源:发表于2020-08-04 16:12 被阅读0次

1.线程状态

1.NEW状态

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

2.Runnable状态

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

3.Running状态

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

4.BLOCKED状态

线程正在等待获取锁

  • 进入阻塞状态,比如调用了sleep或者wait方法
  • 进入某个阻塞的IO操作,比如因网络数据的读写进入Blocked状态
  • 获取某个锁资源,从而加入到该锁的阻塞队列中而进入Blocked状态
5.TERMINATED状态

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

2.停止线程

  • run()方法执行完毕,自然终止
  • 停止一个线程的操作需要使用Thread.interrupt()等于给线程打一个停止标记,此方法不会终止一个正在运行的线程,需要加入一个判断才能完成线程的停止

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只能保证一个共享变量的原子操作

  • 对多个共享变量操作时,可以用锁
  • 把多个共享变量合并成一个共享变量来操作
    java 1.5开始,jdk提供了AtomicReference类来保证引用对象之间的原子性,可以把多个变量放在一个对象来进行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包提供了哪几个类?

  • AtomicBoolean:原子更新布尔类型
  • AtomicInteger:原子更新整形
  • AtomicLong:原子更新长整型

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

  • AtomicIntegerArray:原子更新整型数组里的元素
  • AtomicLongArray:原子更新长整型数组里的元素
  • AtomicReferenceArray:原子更新引用类型数组里的元素

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

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

  • AtomicReference:原子更新引用类
  • AtomicReferenceFieldUpdater:原子更新引用类型里的字段
  • AtomicMarkableReference:原子更新带有标记位的引用类型。标记位用boolean类型表示,构造方法时AtomicMarkableReference(V initialRef,boolean initialMark)

相关文章

  • Android 高级面试-3:语言相关

    主要内容:Kotlin, Java, RxJava, 多线程/并发, 集合 1、Java 相关 1.1 缓存相关 ...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 学习方向

    JAVA基础 多线程、JUC(Java Util Concurrency)、IO、集合 JVM相关 高并发 Spr...

  • Android下多线程的实现

    Android下多线程相关 线程安全相关问题参考:java内存模型与线程 android下与多线程有关的主要有以下...

  • Java基础(三)

    Java要点3 JAVA多线程相关 Thread、Runnable、Callable、Futrue类关系与区别 R...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • Java多线程相关

    1.线程状态 1.NEW状态 创建了一个Thread对象,并没有处于执行状态,因为没有调用start方法启动该线程...

  • java多线程相关

    今天看了一点java多线程的东西,学习了两个关键字。第一个是 synchronized,字面上是同步的意思,用来修...

  • java多线程相关

    java多线程

  • java多线程(2)-线程同步与线程安全

    前言 前面我们在java多线程相关(1)-synchronized,wait,notify,volatile中简单...

网友评论

      本文标题:Java多线程相关

      本文链接:https://www.haomeiwen.com/subject/jmphrktx.html