Java中创建线程有哪几种方式

1.继承Thread类

总结:通过继承 Thread 类,重写 run() 方法,而不是 start() 方法
Thread 类底层实现 Runnable 接口

类只能单继承
接口可以多继承

2.实现Runnable接口

总结:通过实现 Runnable 接口,实现 run() 方法,依然要用到 Thread

3.实现Callable接口

通过实现 Callable 接口,实现 call() 方法,使用Thread+FutureTask配合可以得到异步线程的执行结果

4.利用线程池来创建线程

用 ExecutorService 创建线程
注意:不建议用 Executors 创建线程池,建议用 ThreadPoolExecutor 定义线程池。
用的无界队列,可能造成 OOM ;不能自定义线程名字,不利于排查问题。

以上四种方式底层都是基于 Runnable。

4.1标题线程池的五种状态:

  • RUNNING:既能接受新任务,也会正常处理队列中的任务
  • SHUTDOWN:不接受新任务,继续把队列中的任务处理完
  • STOP:不接受新任务,不处理队列中的任务,并且正在运行的线程也会被中断
  • TIDYING线程池中没有线程在运行之后,线程池状态会自动变成TIDYING,并且会调用 terminated(),该方法是空方法,可以自行扩展实现。
  • TERMINATED
    terminated() 方法执行完成之后,线程池的状态就会变成 TERMINATED

你可能感兴趣的:(JAVA基础,java,jvm,开发语言)