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);
}
}
相关推荐
常见的问题
- 注意:不能对已经启动的线程再次调用`start()`方法,否则会抛出`IllegalThreadStateException`异常。 2. **就绪状态**: - 线程对象被创建并调用`start()`方法之后,线程进入就绪状态。 - 就绪状态的线程已...
* IllegalThreadStateException异常的抛出原因 本文对Java多线程start()方法的原理和实现机制进行了深入探究,了解了start()方法的工作机制和需要注意的地方,为开发者提供了实践和参考价值。
- 死亡状态的线程无法复生,即使尝试再次调用 `start()` 方法也会抛出 `IllegalThreadStateException` 异常。 ### 附加知识点 #### 线程的状态转换图 线程状态之间的转换非常灵活,可以从一种状态转换到另一种...
关于为什么使用`start()`而不是直接调用`run()`,原因是`start()`方法内部会调用`start0()`,这是一个原生方法(native method),它由Java Native Interface (JNI)实现,与Java虚拟机(JVM)直接交互。当调用`start...
当`threadStatus`不为0时,会抛出`IllegalThreadStateException`异常;之后,通过`group.add(this)`将当前线程添加到线程组,并通过本地方法`start0()`启动线程。 4. **多线程案例执行过程分析** - 示例代码展示了...
- 必须在调用`start()`方法之前设置线程为守护线程,否则会抛出`IllegalThreadStateException`异常。 - 在守护线程中创建的新线程也会默认成为守护线程。 - 守护线程不应该直接操作资源,比如文件或数据库,因为...
在上述代码中,第二次调用`t.start()`会导致`IllegalThreadStateException`,因为线程`t`已经启动过。 总结来说,`Thread.start()`和`Thread.run()`在Java多线程编程中扮演了不同的角色。`start()`用于启动新线程并...
需要注意的是,一旦线程启动(进入RUNNABLE状态),就不能再次调用`start()`方法,否则会抛出`IllegalThreadStateException`异常。 在售票员问题的示例中,展示了如何在多线程环境下正确地控制并发。在`...
这通常是因为程序员未能正确地管理内存资源,如忘记释放不再使用的对象或使用了不当的数据结构等原因造成。 - **内存溢出**:当程序在运行过程中,由于申请内存过多而系统剩余内存不足时发生的错误。这种情况通常...
- IllegalThreadStateException - NumberFormatException - Error 在异常处理中,有以下两种主要方法: 1. 使用`try...catch...finally`结构: 这种方式允许你在可能抛出异常的代码块前放置`try`关键字,然后...
如果一个线程已经启动,再次调用 `start()` 会抛出`IllegalThreadStateException`。 - **run()**:`run()` 方法包含了线程要执行的具体任务。当`start()`被调用时,`run()` 会在新线程上下文中执行。如果你直接调用...
死亡的线程无法再次启动,尝试调用`start()`会抛出`IllegalThreadStateException`。 阻止线程执行有几种方法: - **睡眠(Sleep)**:`Thread.sleep(long millis[, int nanos])`使当前线程暂停执行指定的毫秒数。...
9. **Error Handling**: 类如`IllegalAccessException`, `IllegalArgumentException`, `IllegalMonitorStateException`, `IllegalStateException`, 和 `IllegalThreadStateException` 是Java中常见的运行时异常,...
如果尝试在已启动的线程上调用`setDaemon()`,或者当前线程不具备修改目标线程权限时,可能会抛出`IllegalThreadStateException`或`SecurityException`。 以下是一个简单的Java守护线程示例: ```java public ...
在Thread类的start()方法中,如果线程已经启动,则会抛出IllegalThreadStateException异常。而在线程运行的过程中,可能会抛出各种异常,这时需要通过try-catch块来捕获这些异常,避免线程因异常而提前终止。 通过...
值得注意的是,`start()`方法只能被调用一次,多次调用会导致`IllegalThreadStateException`。 4. **run()方法**:`run()`方法包含了线程要执行的任务,也被称为线程体。当线程被调度并开始运行时,`run()`方法会被...
终止的线程无法再次启动,尝试调用`start()`方法将抛出`IllegalThreadStateException`异常。 线程状态的转换通常涉及线程调度、锁的获取与释放以及线程间的协作。例如,线程从运行状态转变为阻塞状态可能是因为调用...
1. setDaemon(true) 必须在调用线程的 start()方法之前设置,否则会抛出 IllegalThreadStateException 异常。 2. 在守护线程中产生的新线程也是守护线程。 3. 不要认为所有的应用都可以分配给守护线程来进行服务,...