Java线程知识整理(三)-创建线程和ThreadLocal(未完成,待续)

384 阅读1分钟

创建线程

通过Runnable接口创建线程

  1. 重写Runnable的run方法
  2. 使用runnable对象构造Thread对象
  3. 启动线程

继承Thread类创建线程

  1. 继承Thread类,重写run方法
  2. 构造Thread子类
  3. 调用start

使用Callable和FutureTask创建线程

  1. 实现Callable接口,重写call方法
  2. 传入Callable对象,构造FutureTask(Runnable子类)对象
  3. 传入FutureTask对象,构造Thread对象,启动线程

将Callable或者Runnable放到线程池ExecutorService中执行

  1. 实现Callable/Runnable接口,重写call/run方法
  2. 构建ExecutorService线程池对象,调用线程池execute或者submit方法执行线程
  3. 对于submit方法提交,使用Future来获取线程执行结果

线程执行

线程start方法真正执行的是Runnable的run方法。

ThreadLocal

工具类,是Thread的局部变量。

当没有ThreadLocal时,需要在整个上下文调用的方法中将关键参数透传(threadcontext)

问题:每个方法都要加这个参数;若某处透传改参数或设置为null,后续调用用到这个参数的代码会受影响。

使用ThreadLocal改进。

误用引起的OOM问题

finally代码部分调用remove。