1:线程 进程里多个不同的执行路径
2:常用方法 yield()、sleep()、join()、wait()
3:线程的状态 运行 就绪 阻塞 死亡
4:一个线程调用两个方法,一个方法加锁,一个方法不加锁;执行加锁的方法时不影响没有加锁的方法。如果两个方法都加锁也都能正常执行
5:为什么synchronized锁是可重入锁,因为如果一个子类的同步方法调用父类的同步方法(super方法)时,如果不能重入就会发生死锁
6:synchronized保证原子性、可见性、有序性;但是不能保证指令重排。
7:synchronized有一个锁升级的过程
7.1偏向锁 为线程分配一个id,当下次是同一个id的线程直接通过
7.2自旋锁 自旋过程中持有cpu
7.3自旋十次以后升级为重量级锁(需要切换到内核态)
8:线程执行时间长,线程数多优先使用重量级锁;线程执行时间少,线程数少使用自旋锁
9:不能用String和基本数据类型的包装类作为锁对象