Java中线程的思考
Java中线程的思考

Java中线程的思考

Java中有几种创建线程的方式?

刚开始看到这个“八股”的时候,很多答案都至少有四种以上:继承Thread类、实现Runnable接口、实现Callable接口、使用ExecutorService线程池、CompletetableFuture类等等,虽然创建线程的方式在API层面上有以上几种,但底层都最终是通过Thread对象与操作系统的线程进行绑定(通过JVM的native方法最终调用到操作系统的线程创建函数),直接调用run()方法并不会创建新线程,只有调用start()方法才会触发新线程的创建。

o3ao1y9y
  • 类加载的时候将Java方法与本地JVM函数绑定
  • 当调用Thread.start()时,Java层调用start0()方法,找到与之绑定的JVM层函数,这个函数调用create_thread()函数,创建原生的操作系统线程
  • 创建出一条内核线程后,映射Java线程与OS线程
  • 最后执行载入的线程体,也就是编写的run()方法

Runnable、Callab不是创建线程的方式,它们是创建线程体的方式,线程体是一个可运行的任务。

Callable实际上就是Runnable的封装体。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注