1.进程线程区别,线程安全和非线程安全区别
线程:程序计数器、虚拟机栈、本地方法栈
线程安全:多个线程操作共享资源,执行统一数据
2. 线程状态,start,run,wait,notify,yiled,sleep,join等方法的作用以及区别
线程状态转换图。
sleep–TIME-WAITING不释放 wait–WAITING 释放锁
join /join(time)分别从运行态进入到 WAITING/TIME-WAITING
yiled 从run–ready状态
3.wait,notify阻塞唤醒确切过程?在哪阻塞,在哪唤醒?为什么要出现在同步代码块中,为什么要处于while循环中
为什么在同步代码块:
- wait,notify只有在该线程获取到锁时才能调用,否则报
IllegalMonitorStateException
错误,wait是Object类方法,每个对象都有monitor锁,访问操作这个对象的方法就要先获得monitor锁 - wait()和notify如果不在同步代码块中可能导致wait后程序永久等待
4.线程中断,守护线程
调用Interrupt方法在阻塞、限期等待、无限期等待抛异常结束线程
5.Java乐观锁机制,CAS思想?缺点?是否原子性?如何保证?
Java乐观锁两种实现方式:版本号(数据库表中加入版本字段),CAS(原子类AtomicInter中调用,自增)
缺点:
- ABA(AtomicStampedReference 解决,看标记)
- 自旋CAS时间过长
- 只能保证一个共享变量的原子操作