Java口试题:假如你这样做,你会悔恨的,两次启动同一个线程~~~ ...

宁睿  金牌会员 | 2024-5-19 23:32:45 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 950|帖子 950|积分 2860

当一个线程被启动后,假如再次调start()方法,将会抛出IllegalThreadStateException非常。 
这是因为Java线程的生命周期只有一次。调用start()方法会导致系统在新线程中运行执行体,但是假如线程已经结束,则不能再次使用,需要重新创建一个新的线程对象并调用start()方法。
以下是代码示例:
  1. public class ThreadTest {
  2.     public static void main(String[] args) {
  3.         Thread thread = new Thread(new Runnable() {
  4.             @Override
  5.             public void run() {
  6.                 System.out.println("Thread started");
  7.             }
  8.         });
  9.         // 第一次调用start方法
  10.         thread.start();
  11.         try {
  12.             Thread.sleep(1000);
  13.         } catch (InterruptedException e) {
  14.             e.printStackTrace();
  15.         }
  16.         // 第二次调用start方法,会抛出IllegalThreadStateException异常
  17.         thread.start();
  18.     }
  19. }
复制代码
上述代码中,我们在一个新的线程中启动了一个执行体,并等候1秒钟后再次调用 start()方法。在第二次调用start()方法时,由于该线程已经执行完毕,此时会抛出IllegalThreadStateException非常。
测试结果:
  1. Thread started
  2. Exception in thread "main" java.lang.IllegalThreadStateException
  3.   at java.lang.Thread.start(Thread.java:708)
  4.   at com.gmb.springcloud.ThreadTest.main(ThreadTest.java:20)
复制代码
Java线程是一种利用系统级别的资源,线程的启动和结束都需要涉及到对应的利用系统调度。在Java中,每个线程只能被启动一次,并且一旦线程结束,它的状态就不能再改变。这也是为什么假如同一个线程对象调用了两次start()方法会抛出 IllegalThreadStateException非常的缘故原由。 
 
在底层实现上,当我们调用Thread类的start()方法时,JVM会首先检查当前线程的状态是否为NEW(新建)状态,假如不是,则抛出非常。假如当前线程状态正确,则将该线程到场到调度队列中等候利用系统调度执行。此时,线程的状态会从NEW转换为 RUNNABLE(可运行)状态,并开始执行其中的run()方法。由于一个线程只能被执行一次,因此当我们实验再次调用start()方法时,JVM会检测当前线程状态是否处于已结束(TERMINATED)状态或者死亡(DEAD)状态。假如是,那么该线程无法被重新启动,因为该线程已经完成了所需的任务并退出了。 
 
综上所述,每个线程只能被启动一次,不能重复启动。这也是为什么假如一个线程两次调用start()方法就会抛出非常的缘故原由。
 
往期口试题:
Java口试题:@PostConstruct、init-method和afterPropertiesSet执行顺序?
Java口试题:SimpleDateFormat是线程安全的吗?使用时应该注意什么?
Java口试题:细数ThreadLocal大坑,内存走漏本可制止
Java口试题:请谈谈对ThreadLocal的明白?
Java口试题:为什么HashMap不建议使用对象作为Key?
Java口试题:你知道Spring的IOC吗?那么,它为什么这么重要呢?
Java口试题:线程池内“闹情绪”的线程,怎么办?
Java口试题:Spring Bean线程安全?别担心,只要你不写并发代码就好了!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表