多线程面试题
2021-07-08 本文已影响0人
菜鸟养成记
多线程面试相关
1. 并发编程三要素
原子性:原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。
可见性:可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。
有序性:有序性,即程序的执行顺序按照代码的先后顺序来执行。
2. 实现可见性的方法有哪些
synchronized或者lock,保证同一个时刻只有一个线程获取锁执行代码,释放锁之前把最新的值刷新到主内存,实现可见性。
3. synchronized 和 lock
synchronized:
synchronized是Java中的关键字,是Java语言内置的特性。
synchronized锁的范围:代码块、类、方法
synchronize的锁释放的方法:
1、 获取锁的线程执行完了该代码块,然后线程释放对锁的占有;
2 、线程执行发生异常,此时JVM会让线程自动释放锁;
lock:
Lock是java的一个interface接口
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
void unlock();
Condition newCondition();
}
lock 需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对象才能保证锁的生效。且在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。