1. 创建线程有哪几种方式?(⭐⭐⭐⭐

创建线程有三种方式,分别是继承Thread类、实现Runnable接口、实现Callable接口

2. 说说Thread类的常用方法(⭐⭐

Thread类常用静态方法:

Thread类常用实例方法:

3. run()和start()有什么区别?(⭐⭐

run()方法被称为线程执行体,它的方法体代表了线程需要完成的任务,而start()方法用来启动线程。

调用start()方法启动线程时,系统会把该run()方法当成线程执行体来处理。如果直接调用线程对象的run()方法,系统把线程对象当成一个普通对象,而run()方法也是一个普通方法,而不是线程执行体。

4. 线程是否可以重复启动,会有什么后果?(⭐⭐

只能对处于新建状态的线程调用start()方法,否则将引发IllegalThreadStateException异常。

原因是当一个线程已经开始执行时,再次启动该线程可能会导致数据不一致或者出现竞态条件,而且重复启动线程也会消耗更多的系统资源,降低系统性能。

5. 介绍一下操作系统 线程的生命周期(⭐⭐

  1. 新建:创建新的进程
  2. 就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行。
  3. 执行:处于就绪队列中的进程获得了时间片运行进程。
  4. 阻塞:进程时间片用完进入阻塞队列中等待唤醒。
  5. 终止:进程执行完毕。

Untitled

<aside> 💡

在Java中有6种状态:

</aside>

6. 如何实现线程同步?(⭐⭐

线程同步是指多个线程在执行过程中需要相互协调和处理,以避免竞态条件(race condition)和死锁(deadlock)等问题发生。