写点什么

Java 并发面试常见考点

作者:浅羽技术
  • 2022 年 8 月 24 日
    四川
  • 本文字数:801 字

    阅读完需:约 3 分钟

Java并发面试常见考点

一、JAVA 如何开启线程?怎么保证线程安全?

线程和进程的区别:

进程是操作系统进行资源分配的最小单元。线程是操作系统进行任务分配的最小单元,线程隶属于进程。

如何开启线程?

1、继承 Thread 类,重写 run 方法。2、实现 Runnable 接口,实现 run 方法。3、实现 Callable 接口,实现 call 方法。通过 FutureTask 创建一个线程,获取到线程执行的返回值。4、通过线程池来开启线程。

怎么保证线程安全?

加锁:


1、 JVM 提供的锁, 也就是 Synchronized 关键字。2、 JDK 提供的各种锁 Lock。

二、 Volatile 和 Synchronized 有什么区别?Volatile 能不能保证线程安全?DCL(Double Check Lock)单例为什么要加 Volatile?

1、Synchronized 关键字,用来加锁。 Volatile 只是保持变量的线程可见性。通常适用于一个线程写,多个线程读的场景。


2、不能。Volatile 关键字只能保证线程可见性, 不能保证原子性。


3、Volatile 防止指令重排。在 DCL 中,防止高并发情况下,指令重排造成的线程安全问题。

三、JAVA 线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?

1、JAVA 的锁就是在对象的 Markword 中记录一个锁状态。无锁,偏向锁,轻量级锁,重量级锁对应不同的锁状态。


2、JAVA 的锁机制就是根据资源竞争的激烈程度不断进行锁升级的过程。


四、谈谈你对 AQS 的理解。AQS 如何实现可重入锁?

1、AQS 是一个 JAVA 线程同步的框架。是 JDK 中很多锁工具的核心实现框架。


2、 在 AQS 中,维护了一个信号量 state 和一个线程组成的双向链表队列。其中,这个线程队列,就是用来给线程排队的,而 state 就像是一个红绿灯,用来控制线程排队或者放行的。 在不同的场景下,有不用的意义。


3、在可重入锁这个场景下,state 就用来表示加锁的次数。0 标识无锁,每加一次锁,state 就加 1。释放锁 state 就减 1。

五、有 A,B,C 三个线程,如何保证三个线程同时执行?如何在并发情况下保证三个线程依次执行?如何保证三个线程有序交错进行?

CountDownLatch, CylicBarrier, Semaphore。

发布于: 2022 年 08 月 24 日阅读数: 58
用户头像

浅羽技术

关注

才疏学浅,习习而为,编程羽录,与你同行。 2019.02.26 加入

分享一些计算机信息知识、理论技术、工具资源、软件介绍、后端开发、面试、工作感想以及生活随想等一系列文章。

评论

发布
暂无评论
Java并发面试常见考点_Java_浅羽技术_InfoQ写作社区