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 、 ⾃旋锁是⼀种对多处理器相当有效的机制,⽽在单处理器 ⾮抢占式 的系统中基本上没有作⽤ 。