1. 什么是线程?
1
、线程是操作系统能够进⾏运算调度的最⼩单位,它被包含在进程之中,是进程中的实际运作单位,可以使⽤多线程对
进⾏运算提速。
⽐如,如果⼀个线程完成⼀个任务要100毫秒,那么⽤⼗个线程完成改任务只需10毫秒
2. 什么是线程安全和线程不安全?
1、线程安全
线程安全
:
就是多线程访问时,采⽤了加锁机制,当⼀个线程访问该类的某个数据时,进⾏保护,其他线程不能进⾏
访问,直到该线程读取完,其他线程才可使⽤。不会出现数据不⼀致或者数据污染。
Vector
是⽤同步⽅法来实现线程安全的, ⽽和它相似的
ArrayList
不是线程安全的。
2、线程不安全
线程不安全:就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,⽽⽆写操作,⼀般来说,这个全局变量是线程安全的;若有多个
线程同时执⾏写操作,⼀般都需要考虑线程同步,否则的话就可能影响线程安全。
3. 什么是⾃旋锁?
⾃旋锁是
SMP
架构中的⼀种
low-level
的同步机制。
1
、当线程
A
想要获取⼀把⾃旋锁⽽该锁⼜被其它线程锁持有时,线程
A
会在⼀个循环中⾃旋以检测锁是不是已经可⽤了。
2
、⾃选锁需要注意:
由于⾃旋时不释放
CPU
,因⽽持有⾃旋锁的线程应该尽快释放⾃旋锁,否则等待该⾃旋锁的线程会⼀直在那⾥⾃
旋,这就会浪费
CPU
时间。
持有⾃旋锁的线程在
sleep
之前应该释放⾃旋锁以便其它线程可以获得⾃旋锁。
3
、⽬前的
JVM
实现⾃旋会消耗
CPU
,如果⻓时间不调⽤
doNotify
⽅法,
doWait
⽅法会⼀直⾃旋,
CPU
会消耗太⼤
4
、
⾃旋锁⽐较适⽤于锁使⽤者保持锁时间⽐较短的情况,这种情况⾃旋锁的效率⽐较⾼。
5
、
⾃旋锁是⼀种对多处理器相当有效的机制,⽽在单处理器
⾮抢占式
的系统中基本上没有作⽤
。
4. 什么是CAS