线程池问题总结

1. run()和start()区别

1)run方法是runnable接口的方法

start方法是thread类的方法

2)run方法是JVM回调的方法,是线程的入口

start是启动线程的方法

2. 为什么start()一个线程只能调用一次?

start方法根据threadStatus = 0来判断当前线程是否第一次启动,如果threadStatus不等于0会throw new IllegalThreadStateException();

start( )调用start0():private native void start0();start0()方法更新threadStatus的值

线程第一次调用start(),threadStatus如下:

线程问题总结

线程第一次调用start(),调用start0(),threadStatus被更新,如下:  

线程问题总结

线程第二次调用start(),threadStatus如下: 

线程问题总结

start0():本地方法,private native void start0(),native方法的注册是在Thread对象初始化的时候由registerNatives()方法完成的

线程问题总结

Java有两种方法:Java方法和本地方法。Java方法是由Java语言编写,编译成字节码,存储在class文件中。本地方法是由其他语言(比如C,C++,或者汇编)编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专有的。Java方法是平台无关的,单本地方法却不是。运行中的Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。本地方法是联系Java程序和底层主机操作系统的连接方法。

2.线程池是怎样工作的?

 

3.四种线程池的区别

 

4.线程池任务队列为什么要保证线程安全?

 

5.线程池内部是调用run()还是start()?

start()

 

6.单线程池只有一个线程,若当前线程有异常未处理,当前线程池是什么情况?

 

7.单线程池,什么情况下才会发生oom?

 

8.四种线程池什么情况下会发生oom?

 

9.threadFactory线程池工厂的作用?

相关文章:

  • 2021-10-11
  • 2021-12-21
  • 2021-11-23
猜你喜欢
  • 2022-03-05
  • 2022-12-23
  • 2021-12-11
  • 2021-09-07
相关资源
相似解决方案