在线程上多次调用 start() 会发生啥[关闭]

Posted

技术标签:

【中文标题】在线程上多次调用 start() 会发生啥[关闭]【英文标题】:What happens when calling start() on a thread several times [closed]在线程上多次调用 start() 会发生什么[关闭] 【发布时间】:2012-09-02 01:38:17 【问题描述】:

如果我在线程 A 上调用 start() 使其运行,然后在它仍在运行时再次调用 start(),会发生什么?

例子:

myThread.start();

// myThread is running...  

myThread.start(); 

【问题讨论】:

你可以自己试试看。 你试了一次会发生什么?当您在 Javadoc 中查找它时发现了什么?零研究。 -1. 【参考方案1】:

将引发IllegalThreadState 异常。没有办法让线程在启动后回到“等待启动”状态,因此无论线程在第一个start 之后处于何种状态,第二个线程都将处于错误状态.

【讨论】:

如果我想重启线程怎么办?我在线程上调用中断并在线程运行方法上检查它以退出,然后调用启动?如果线程没有终止? @dariofrongi:这是个坏主意。首先对线程进行编码以执行您想做的事情,这样您就不必弄乱它。如果你中断它并且它持有一个恢复它的线程所需的锁,你就会死锁。 我必须实现一个线程,该线程在他的构造函数中采用蓝牙设备,并在运行方法中尝试连接该设备,但如果在主线程中同时蓝牙线程正在运行用户单击再次连接并选择另一个蓝牙设备,我想停止蓝牙线程并用新设备再次运行它,怎么能做到? @dariofrongi:不要理会该线程并创建一个新线程。 是的,但是要终止这个线程调用中断并在运行方法上检查它?

以上是关于在线程上多次调用 start() 会发生啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在同一个模型上多次调用 fit() 有啥作用?

在这种情况下主线程会发生啥

线程重复执行问题与线程池

如果 ThreadPool 线程死亡会发生啥?

调用具有条件变量等待的线程对象的析构函数时会发生啥?

在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生啥? [关闭]