15个顶级Java多线程面试题及答案

很多朋友对于java多线程为什么弃用stop和suspend和线程不建议stop不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

本文目录

  1. java多线程为什么弃用stop和suspend
  2. 正在终止线程是什么意思
  3. 按键精灵多线程有几种实现方法
  4. 身为一个程序员,如何优雅的结束一个线程

java多线程为什么弃用stop和suspend

stop和suspend都有一些共同的点:都试图专横的控制一个给定了的线程的行为.从JDK1.2开始,这两个方法都被弃用了.stop天生就不安全,而经验告诉我们呢suspend方法会经常导致死锁。stop这个方法将终止所有未结束的方法,包括run方法。

正在终止线程是什么意思

线程终止后,其生命周期结束了,即进入死亡态,终止后的线程不能再被调度执行,以下几种情况,线程进入终止状态:1)线程执行完其run()方法后,会自然终止。2)通过调用线程的实例方法stop()来终止线程。

可以通过Thread中的isAlive()方法来获取线程是否处于活动状态;线程由start()方法启动后,直到其被终止之间的任何时刻,都处于'Alive'状态。

按键精灵多线程有几种实现方法

按键精灵提供的多线程功能有5个要用到的命令,下面我们一一介绍:

[DimEnv]

解释:定义环境变量。

备注:用于多线程之间传递变量值功能,仍在试验阶段,不推荐新手使用。

[BeginThread]

格式:{返回线程ID}=BeginThread(过程名)

解释:启动某个线程。

备注:用于多线程功能,仍在试验阶段,不推荐新手使用。

[StopThread]

格式:StopThread{线程ID}

解释:停止某个线程。

备注:用于多线程功能,仍在试验阶段,不推荐新手使用。

[PauseThread]

格式:PauseThread{线程ID}

解释:暂停某个线程。

备注:用于多线程功能,仍在试验阶段,不推荐新手使用。

[ContinueThread]

格式:ContinueThread{线程ID}

解释:继续某个线程。

备注:用于多线程功能,仍在试验阶段,不推荐新手使用。

例子如下

Globalkey,Hwnd1,Hwnd2,Hwnd3

RunApp"notepad.exe"

RunApp"notepad.exe"

RunApp"notepad.exe"

Delay1000

HwndEx=Plugin.Window.Search("记事本")

arr=split(HwndEx,"|")

Hwnd1=Plugin.Window.FindEx(arr(0),0,"Edit",0)

Hwnd2=Plugin.Window.FindEx(arr(1),0,"Edit",0)

Hwnd3=Plugin.Window.FindEx(arr(2),0,"Edit",0)

Do

key=WaitKey()

线程1=BeginThread(按键1)

线程2=BeginThread(按键2)

线程3=BeginThread(按键3)

Loop

Sub按键1

callPlugin.Bkgnd.KeyPress(Hwnd1,key)

EndSub

Sub按键2

callPlugin.Bkgnd.KeyPress(Hwnd2,key)

EndSub

Sub按键3

callPlugin.Bkgnd.KeyPress(Hwnd3,key)

EndSub

身为一个程序员,如何优雅的结束一个线程

谢谢邀请!

早期的jdk版本中提供了退出的方法:hread.stop,Thread.suspend,Thread.resume和Runtime.runFinalizersOnExit,因为操作不安全,可能会出现不可控的结果,已不推荐使用。

在回答之前咱们先看下线程的几个状态和状态切换的过程,如下图(不想画了,网上盗图):

线程退出肯定是初始化后的任何一个状态(不包含终止态)退出。

线程启动后是独立运行的,正常来说启动后是无法干预运行的,只能等其正在运行结束,如果想要干预,只能在共享内存区加状态标识,其实jdk已经内置了一个状态标识就是中断标识,调用中断方法,但是waiting状态的线程会抛出中断异常,自己可以再优化下加共享状态变量。

总结一下有三种方法:

1、等线程自己执行完结束(这种最优雅,但是也没有讨论的意义了)。

2、调用中断方法,判断中断标识。但是waiting状态下会抛异常,不能算作优雅,示例代码如下:

3、自己加中断状态标识,示例代码如下:

总结下:

waiting状态:此状态下退出只能调用中断方法。

blocked状态:分两种,一种可中断,调用中断方法退出;一种不可中断,只能等running后退出。

ready状态:等cpu调度,不可干预。

running状态:自己加共享状态标识。

所以最终“优雅退出”代码如下:

文章分享结束,java多线程为什么弃用stop和suspend和线程不建议stop的答案你都知道了吗?欢迎再次光临本站哦!

Java多线程 线程通信