写点什么

Java Core「1」JUC- 线程基础

作者:Samson
  • 2022 年 5 月 21 日
  • 本文字数:1045 字

    阅读完需:约 3 分钟

Java Core「1」JUC-线程基础

01-线程状态

  • NEW

    // 线程创建后,线程的状态为 NEW    Thread t = new Thread(new Runnable() {...});
复制代码


  • RUNNABLE

    // 调用线程的 start 方法后,线程状态变为 RUNNABLE    t.start();
复制代码


注:此时线程正在被 JVM 执行,但是并不见得真的在 CPU 上执行,有可能在等待 CPU 的时间片
复制代码


  • BLOCKED

  • 线程等待 monitor 锁时,会进入到阻塞状态。

  • WAITING / TIMED_WAITING

  • Object.wait() / Thread.join() / LockSupport.park() 导致线程进入 WAITING 状态,即等待其他的线程调用 Object.notify() / Object.notifyAll() / 线程执行完毕 / LockSupport.unpark()

  • 带超时版本的上述方法会使线程进入 TIMED_WAITING 状态

  • 此外,Thread.sleep() 也会使线程进入到 TIMED_WAITING 状态

  • TERMINATED

  • 线程执行完毕后(正常或异常退出),该线程进入到 TERMINATED 状态


02-创建线程的方式

  1. 继承 Thread 类

    class MyThreadA extends Thread {      @Override      public void run() {        // ....      }    }
复制代码


  1. 实现 Runnable 接口

    class MyThreadB implements Runnable {      @Override      public void run() {        // ...      }    }
复制代码


  1. 实现 Callable 接口

    class MyThreadC implements Callable {      @Override        public Object call() throws Exception {            return null;        }    }
复制代码


注:实现 Runnable 与 继承 Thread 类的区别是,前者更灵活、方便;Runnable 与 Callable 的区别是,前者的 run 方法无法返回值,而后者的 call 方法可以设定返回值。

03-线程的启动方式

  1. Thread.start() 方法(结合 02 中线程创建方式)

    // 继承 Thread 或实现 Runnable 接口    Thread ta = new MyThreadA(); ta.start();    Thread tb = new Thread(new MyThreadB()); tb.start();        // 实现 Callable 接口    FutureTask<Object> ft = new FutureTask<>(new MyThreadC());    Thread tc = new Thread(ft, "name"); tc.start();
复制代码


  1. ExecutorService 框架

  2. 可通过工具类 Executors 快捷地创建不同类型的线程池(阿里开发手册并不推荐这么做,原因是容易忽略线程池的内部逻辑,从而造成性能问题,推荐使用 ThreadPoolExecutor 方式)

  3. cached thread pool

  4. fixed thread pool

  5. single thread pool

  6. scheduled thread pool

  7. work stealing pool

  8. 提交任务到线程池(Runnable 或 Callable 对象)

  9. execute,无返回值

  10. submit,有返回值,Future (更多信息参考[1])

  11. CompletableFuture,更多信息参考[2]

    CompletableFuture.supplyAsync(() -> "Hello");
复制代码


发布于: 刚刚阅读数: 3
用户头像

Samson

关注

还未添加个人签名 2019.07.22 加入

还未添加个人简介

评论

发布
暂无评论
Java Core「1」JUC-线程基础_学习笔记_Samson_InfoQ写作社区