创建线程
通过Runnable接口创建线程
- 重写Runnable的run方法
- 使用runnable对象构造Thread对象
- 启动线程
继承Thread类创建线程
- 继承Thread类,重写run方法
- 构造Thread子类
- 调用start
使用Callable和FutureTask创建线程
- 实现Callable接口,重写call方法
- 传入Callable对象,构造FutureTask(Runnable子类)对象
- 传入FutureTask对象,构造Thread对象,启动线程
将Callable或者Runnable放到线程池ExecutorService中执行
- 实现Callable/Runnable接口,重写call/run方法
- 构建ExecutorService线程池对象,调用线程池execute或者submit方法执行线程
- 对于submit方法提交,使用Future来获取线程执行结果
线程执行
线程start方法真正执行的是Runnable的run方法。
ThreadLocal
工具类,是Thread的局部变量。
当没有ThreadLocal时,需要在整个上下文调用的方法中将关键参数透传(threadcontext)
问题:每个方法都要加这个参数;若某处透传改参数或设置为null,后续调用用到这个参数的代码会受影响。
使用ThreadLocal改进。
误用引起的OOM问题
finally代码部分调用remove。