Java - 让死线回归活着

时间:2012-03-28 10:14:16

标签: java

我的一次采访(几年前)提到了以下问题

  

将死线程恢复活力的所有可能性/方法是什么(Runnable State)

我为没有办法辩护。但他迫切要求我思考。有没有可用的选择?或者他只是检查我对我答案的信心?

5 个答案:

答案 0 :(得分:5)

死亡状态:当run()方法完成时,线程可以被认为是死的。如果任何线程出现在这个状态,这意味着它不能再次运行。

答案 1 :(得分:4)

您可以使用旧的Thread对象创建一个新对象,这几乎是一样的:

(new Thread(oldThread)).start();

答案 2 :(得分:3)

我认为他试图刺激你对ThreadPools的了解。正如您所说,线程无法恢复,但使用线程池或更新的执行器框架,我们可以减少对象创建开销。

答案 3 :(得分:0)

这取决于你对死亡国家的意思。如果你有一个'休眠'的线程,它实际上不会做任何工作,所以你可以'复活'它并使它从这一点开始继续运行。虽然线程没有死,但它已经睡着了,你确实让它恢复了生机。

答案 4 :(得分:-2)

是的,我有类似的问题。当我说不,他问我是否熟悉缓存的Threadpool概念。

他说线程是从池中返回的,它们为多个请求提供服务,如果它只能启动一次,它们如何做到这一点。他还用类似的问题轰炸我,比如Weblogic使用相同的线程来处理所有请求,或者继续为每个请求创建新线程。

我看过weblogic日志,我看到Thread-0被打印出来并执行多项任务。我不确定weblogic是否在池中创建了一个具有相同名称的新线程,或者它是相同的线程,所以我只是试图通过回答以某种方式将他从这个问题中转移到另一个问题。

对这个问题的回答是,我们实际上为线程提供了可运行的对象,并且它不会终止,例如:

while(doINeedToKeepRunning()){
    if(hasMoreTasks()){
        getFirstTask().run();.
    }
    else
    {
        waitForOtherTasks();
    }
}

希望这能回答你的问题。所以这样的线程没有终止它们只是等待可运行或可调用的对象。

我知道这听起来很愚蠢。但这是他们在采访中看到的答案。我看到siva在采访的背景下问了这个问题,我猜他在印度,所以我确切地知道面试官在自己做了这么多面试之后想要做些什么。我已经尝试了所有其他答案,但他们不会停止直到他们得到这个答案。休息是关于他想要回答他们的回答。提出这样毫无意义的问题的关键是混淆受访者并让他改变他的答案并测试他在线程池实现方面的知识。

众所周知,一旦线程终止,就无法再次运行。所以坚持你已经知道的。从来没有一条死线再也无法买到生命。但如果他们用其他东西轰炸你,比如weblogic重用线程会给他们上面的答案。休息是你的全部愿望。