多线程

40 阅读1分钟

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和基本数据类型的包装类作为锁对象