Java多线程-多线程面试题整理

目录

线程安全

什么是线程安全

如何解决线程安全问题

线程的生命周期

线程阻塞问题

线程饥饿问题

活锁

多线程

线程和进程

多线程的上下文切换

并发与并行

同步方法和同步块

单例模式的线程安全性

Synchronized关键字和Lock区别

Synchronized关键字和Volatile关键字区别

Synchronized锁升级过程

ReentrantLock与synchronized

Synchronized的实现原理

sleep()和wait()

Thread.sleep(0)的作用

start()和run()

线程死锁

自旋锁

AQS支持的同步方式

什么是CAS以及产生的问题

Java中如何获取到线程dump文件

虚拟机栈和本地方法栈为什么是私有的

程序计数器为什么是私有的

Hashtable的size()方法

Semaphore作用

CyclicBarrier和CountDownLatch的区别

悲观锁和乐观锁

伪共享

线程池

Java中用到的线程调度算法

常见的线程池及适用场景

线程池工作队列

线程池的优点


线程安全

什么是线程安全

程序执行前和执行后的数据都是一致的,那么就是线程安全的。线程安全有几个级别:

不可变,像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,所以这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用。

绝对线程安全,不管运行时环境如何,调用者都不需要额外的同步措施。要做到这一点通常需要付出许多额外的代价,Java中标注自己是线程安全的类,实际上绝大多数都不是线程安全的,不过绝对线程安全的类,Java中也有,比方说CopyOnWriteArrayList、CopyOnWriteArraySet。

相对线程安全,相对线程安全也就是通常所说的线程安全,像Vector这种,add、remove方法都是原子操作,不会被打断但也仅限于此࿰

你可能感兴趣的:(Java基础,多线程,线程池,线程安全,并发编程)