一、线程创建方式
有三种创建方式
- 直接继承Thread类
- 实现Runnable接口
- 实现Callable接口(实现的是一个异步任务)
二、线程的方法
- sleep
- join
- yield
三、类的方法
- wait
- notify
- notifyAll
四、线程上下文
当前线程使用完时间片后,就会处于就绪状态并让出cpu让其他线程占用,这就是上下文切换
五、线程死锁
产生死锁的条件:
- 请求并持有
- 循环等待
- 不可剥夺
- 互斥性
破环死锁的方法:有序的使用资源
守护线程与用户线程
- 守护线程:比如垃圾回收线程
- 用户线程:main函数所在的线程
两者的区别:当最后一个用户线程结束后,jvm会正常退出。main线程运行结束后,jvm会自动启动一个叫作DestroyJavaVM的线程,该线程会等待所有用户线程结束后终止JVM进程。
六、ThreadLocal
是存在本地线程的ThreadLocals这个hashmap中,其中key为我们定义的ThreadLocal变量的this引用,value则为我们使用set方法设置的值,每个线程的本地变量存放在线程自己的内存变量threadLocals中
ThreadLocal不支持继承性
七、InheritableThreadLocal支持父线程的本地变量的继承
- 在线程创建的时候,就把父线程的值复制到自线程中了