其他分享
首页 > 其他分享> > 线程状态及面试考题

线程状态及面试考题

作者:互联网

线程生命周期有什么

  public static enum Thread.State extends Enum<Thread.State>

线程状态。线程可以处于以下状态之一:

一个线程可以在给定时间点处于一个状态。 这些状态是不反映任何操作系统线程状态的虚拟机状态。

在这里插入图片描述

面试题汇总:

现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

考察join方法

private static void method02(){
   Runnable runnable = new Runnable() {
         @Override public void run() {
             System.out.println(Thread.currentThread().getName() + "执行完成");
         }
     };
     Thread t1 = new Thread(runnable, "t1");
     Thread t2 = new Thread(runnable, "t2");
     Thread t3 = new Thread(runnable, "t3");
     try {
         t1.start();
         t1.join();
         t2.start();
         t2.join();
         t3.start();
         t3.join();
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
 }

线程状态有哪些?状态的转移分别依赖什么方法?

new——start方法

Runnable——wait、sleep方法

timed_waiting

waiting——notify方法或者notifyAll方法

terminated

blocked

在java中wait和sleep方法的不同?

最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。

为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

当你调用start()方法时你将创建新的线程,并且执行在run()方法里的代码。但是如果你直接调用run()方法,它不会创建新的线程也不会执行调用线程的代码。

简单点来说:
new一个Thread,线程进入了新建状态;调用start()方法,线程进入了就绪状态,当分配到时间片后就可以开始运行了。

start()会执行线程的相应准备工作,然后自动执行run()方法的内容。是真正的多线程工作。

而直接执行run()方法,会把run方法当成一个mian线程下的普通方法去执行,并不会在某个线程中执行它,这并不是多线程工作。

Java中你怎样唤醒一个阻塞的线程?

https://blog.csdn.net/u014044812/article/details/79474575

如果线程遇到了IO阻塞,我不认为有一种方法可以中止线程。如果线程因为调用wait()、sleep()、或者join()方法而导致的阻塞,你可以中断线程,并且通过抛出InterruptedException来唤醒它。我之前写的《How to deal with blocking methods in java》有很多关于处理线程阻塞的信息。

参考博客:
https://blog.csdn.net/qq_34039315/article/details/78432606?utm_medium=distr

标签:状态,run,Thread,start,面试,考题,线程,方法
来源: https://blog.csdn.net/YaraRen/article/details/117400019