线程

146 阅读1分钟

创建线程的三种方式

  • 通过继承Thread类创建线程。
  • 实现Runnable接口创建线程类。
  • 通过callable和future接口创建线程。

Java获取多线程的返回值

  • 主线程等待
  • 使用Thread的join阻塞当前线程等待
  • 实现callable接口

线程池创建方式

  • newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收则新建线程。
  • newFiledThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
  • newSceduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
  • newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO)执行

线程池参数有哪些

  • corePoolSize 核心线程大小。
  • maximumPoolSize 线程池最大线程数量。
  • keepAliveTime 空闲线程存活时间。
  • unit 空间线程存活时间。
  • workQueue 工作队列。
  • threadFactory线程工厂。
  • handler 拒绝策略。

线程池拒绝策略

  • ThreadPoolExecutor.AbortPoliy:丢弃任务并抛出rejectedExecutionException异常。 默认!
  • ThreadPoolExecutor.DiscardPoliy:丢弃任务,不抛出异常。
  • ThreadPoolExecutor.DiscardOldestPoliy:丢弃队列最前面的任务,重新提交被拒绝的任务。
  • ThreadPoolExecutor.CallerRunsPoliy:由调用线程处理该任务。