`
aty
  • 浏览: 36525 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

IllegalThreadStateException 产生原因

阅读更多

 

1、对一个线程调用2次以上的start()方法会报错。

ChildThread t1 = new ChildThread("thread1");   
 t1.start();
 t1.start();

 

2、对于已经启动的线程,调用setDaemon会报错

 

class ChildThread extends Thread
 {

  @Override
  public void run()
  {
   System.out.println(this.name + "--child thead begin");

   setDaemon(false);
  }
 }

分享到:
评论

相关推荐

    java.lang.IllegalThreadStateException(解决方案).md

    常见的问题

    Java多线程(二)、线程的生命周期和状态控制

    - 注意:不能对已经启动的线程再次调用`start()`方法,否则会抛出`IllegalThreadStateException`异常。 2. **就绪状态**: - 线程对象被创建并调用`start()`方法之后,线程进入就绪状态。 - 就绪状态的线程已...

    Java多线程start()方法原理解析

    * IllegalThreadStateException异常的抛出原因 本文对Java多线程start()方法的原理和实现机制进行了深入探究,了解了start()方法的工作机制和需要注意的地方,为开发者提供了实践和参考价值。

    线程的5种状态详解.doc

    - 死亡状态的线程无法复生,即使尝试再次调用 `start()` 方法也会抛出 `IllegalThreadStateException` 异常。 ### 附加知识点 #### 线程的状态转换图 线程状态之间的转换非常灵活,可以从一种状态转换到另一种...

    05 看若兄弟,实如父子—Thread和Runnable详解.pdf

    关于为什么使用`start()`而不是直接调用`run()`,原因是`start()`方法内部会调用`start0()`,这是一个原生方法(native method),它由Java Native Interface (JNI)实现,与Java虚拟机(JVM)直接交互。当调用`start...

    java多线程

    当`threadStatus`不为0时,会抛出`IllegalThreadStateException`异常;之后,通过`group.add(this)`将当前线程添加到线程组,并通过本地方法`start0()`启动线程。 4. **多线程案例执行过程分析** - 示例代码展示了...

    java面试宝典

    - 必须在调用`start()`方法之前设置线程为守护线程,否则会抛出`IllegalThreadStateException`异常。 - 在守护线程中创建的新线程也会默认成为守护线程。 - 守护线程不应该直接操作资源,比如文件或数据库,因为...

    Java中Thread.start()和Thread.run()的区别.docx

    在上述代码中,第二次调用`t.start()`会导致`IllegalThreadStateException`,因为线程`t`已经启动过。 总结来说,`Thread.start()`和`Thread.run()`在Java多线程编程中扮演了不同的角色。`start()`用于启动新线程并...

    JUC个人笔记1

    需要注意的是,一旦线程启动(进入RUNNABLE状态),就不能再次调用`start()`方法,否则会抛出`IllegalThreadStateException`异常。 在售票员问题的示例中,展示了如何在多线程环境下正确地控制并发。在`...

    java面试复习资料

    这通常是因为程序员未能正确地管理内存资源,如忘记释放不再使用的对象或使用了不当的数据结构等原因造成。 - **内存溢出**:当程序在运行过程中,由于申请内存过多而系统剩余内存不足时发生的错误。这种情况通常...

    推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第9章 异常处理(共26页).ppt

    - IllegalThreadStateException - NumberFormatException - Error 在异常处理中,有以下两种主要方法: 1. 使用`try...catch...finally`结构: 这种方式允许你在可能抛出异常的代码块前放置`try`关键字,然后...

    线程的常用方法介绍.docx

    如果一个线程已经启动,再次调用 `start()` 会抛出`IllegalThreadStateException`。 - **run()**:`run()` 方法包含了线程要执行的具体任务。当`start()`被调用时,`run()` 会在新线程上下文中执行。如果你直接调用...

    Java线程:线程状态的转换[参考].pdf

    死亡的线程无法再次启动,尝试调用`start()`会抛出`IllegalThreadStateException`。 阻止线程执行有几种方法: - **睡眠(Sleep)**:`Thread.sleep(long millis[, int nanos])`使当前线程暂停执行指定的毫秒数。...

    移动开发文档

    9. **Error Handling**: 类如`IllegalAccessException`, `IllegalArgumentException`, `IllegalMonitorStateException`, `IllegalStateException`, 和 `IllegalThreadStateException` 是Java中常见的运行时异常,...

    Java多线程的线程守护两个例子_.docx

    如果尝试在已启动的线程上调用`setDaemon()`,或者当前线程不具备修改目标线程权限时,可能会抛出`IllegalThreadStateException`或`SecurityException`。 以下是一个简单的Java守护线程示例: ```java public ...

    JAVA多线程编程.pdf

    在Thread类的start()方法中,如果线程已经启动,则会抛出IllegalThreadStateException异常。而在线程运行的过程中,可能会抛出各种异常,这时需要通过try-catch块来捕获这些异常,避免线程因异常而提前终止。 通过...

    Java Thread类1

    值得注意的是,`start()`方法只能被调用一次,多次调用会导致`IllegalThreadStateException`。 4. **run()方法**:`run()`方法包含了线程要执行的任务,也被称为线程体。当线程被调度并开始运行时,`run()`方法会被...

    Java线程的6种状态及切换(透彻讲解).docx

    终止的线程无法再次启动,尝试调用`start()`方法将抛出`IllegalThreadStateException`异常。 线程状态的转换通常涉及线程调度、锁的获取与释放以及线程间的协作。例如,线程从运行状态转变为阻塞状态可能是因为调用...

    【java 多线程】守护线程与非守护线程的详解

    1. setDaemon(true) 必须在调用线程的 start()方法之前设置,否则会抛出 IllegalThreadStateException 异常。 2. 在守护线程中产生的新线程也是守护线程。 3. 不要认为所有的应用都可以分配给守护线程来进行服务,...

Global site tag (gtag.js) - Google Analytics