![]() |
1
4
线程是独立的,但进程和线程之间有区别,也就是说,在进程的情况下,操作系统不仅仅是“杀死”它。之后它也会被清理干净。 如果您开始杀死似乎挂起的线程,很可能会使资源保持锁定和类似状态,如果您对进程执行相同操作,操作系统将为您关闭这些线程。 例如,如果您打开一个文件进行写入,并开始生成数据并将其写入文件,那么这个线程现在挂起,无论出于什么原因,终止线程都会使文件保持打开状态,并且很可能被锁定,直到您关闭整个程序。 所以你的问题的真正答案是:不,你不能用硬的方式杀死线程。 如果您只是要求一个线程关闭,这是不同的,因为线程仍然在控制中,可以在终止之前清理和关闭资源,但是调用类似于killthread的API函数是不好的。 |
![]() |
2
1
如果一个线程挂起,其他线程将继续执行。但是,如果挂起的线程锁定了一个信号量、关键部分或其他类型的同步对象,而另一个线程试图锁定同一个同步对象,那么现在就有了一个死锁,其中有两个死线程。 可以从一个线程监视其他线程。取决于您的平台,这里有可应用的API:我指的是那些您还没有说明您要为什么操作系统编写的API。 |
![]() |
3
0
您没有提到这个平台,但就我而言,NT内核调度线程,而不是以这种方式独立地处理和威胁线程。这在其他平台上可能不是也可能不是这样(有些平台,如Windows3.1,不使用抢占式多线程,如果一个线程进入无限循环,则会影响所有内容)。 |
![]() |
4
0
简单的答案是“是”。 通常,虽然线程中的代码会处理这个可能的hood本身。大多数执行可能挂起的操作的API都有自己的超时特性。 或者,线程不仅要等待可能挂起的操作,还要等待计时器。如果计时器先发出信号,说明操作已挂起。 因为对于在这个场景中有用的看门狗线程来说,需要其他线程中的代码进行一些合作,让线程本身设置超时比看门狗更有意义。 |
![]() |
5
0
线程的调度相互独立。所以您确实可以停止并重新启动挂起的线程。线程不会在单独的地址空间中运行,因此行为不正常的线程仍然可以覆盖内存或获取同一进程中其他线程所需的锁。 |
![]() |
6
0
对Java文档中的杀死和挂起线程的一些缺陷做了一个很好的概述,解释了为什么要执行它的方法被弃用。基本上,如果你希望能够杀死一根线,你必须非常非常非常小心地使它在没有某种腐败的情况下工作。如果一个线程挂起,可能是因为一个bug……在这种情况下,杀死它可能会导致损坏。 http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html 如果您需要能够杀死东西,请使用过程。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |