Java:如何在线程启动后继续执行?

时间:2013-09-17 16:51:41

标签: java multithreading asynchronous

我正在启动一个无限循环的线程,直到某个事件发生。问题是,我想启动这个线程,然后返回到我的程序的正常执行。但是,在启动线程后,代码似乎卡住了。

代码:

public void init()
{
   Runnable thread = new Runnable()
   {
     public void run()
     {
        while(something)
        {
           //do something
        }
     }        
   };
   System.out.println("Starting thread..");
   new Thread(thread).run();
   System.out.println("Returning");
   return;
}

当我开始这个时,我得到输出“Starting thread”但是我没有“返回”,直到run()中while循环的条件停止为止。

我是如何让它以异步方式工作的?

4 个答案:

答案 0 :(得分:13)

使用start而不是run来启动Thread。后者只是同步调用run方法

new Thread(thread).start();

阅读:Defining and Starting a Thread

答案 1 :(得分:1)

您可以在代码中尝试: -

new Thread(thread).start();

如: -

public void init()
{
   Runnable thread = new Runnable()
   {
     public void run()
     {
        while(something)
        {
           //do something
        }
     }        
   };
   System.out.println("Starting thread..");
   new Thread(thread).start();    //use start() instead of run()
   System.out.println("Returning");
   return;
}

答案 2 :(得分:1)

您想拨打new Thread(thread).start()而不是run()

答案 3 :(得分:-1)

您确定自己的方法吗?你说:

The thread should loop indefinitely until certain event occurs.

这是计算资源的巨大损失,该计划主要受限于慢速和失败。您可能希望将线程置于wait()模式并捕获InterruptedException以在发生您感兴趣的事件时将其唤醒。如果对你想要完成的事情的初步理解是正确的,那么我强烈建议你修改你的方法。计算资源是昂贵的,不要浪费在无情的循环中。