无限虽然没有锁定线程

时间:2012-08-24 04:08:53

标签: loops while-loop

如何制作一个while循环,每隔一秒不会冻结应用程序?例如,使用Thread.Sleep()冻结线程。有谁知道吗?

3 个答案:

答案 0 :(得分:1)

public class Test implements Runnable {

@Override
public void run() {
    while(true){
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // Your Statement goes here

    }

}

public static void main(String[] args) {
    Test test= new Test();
    Thread t= new Thread(test);
    t.start();
}

}

答案 1 :(得分:0)

您没有指定语言。 我将提供一个c ++示例,该概念在其他语言中应该类似。

首先,这将使主线程处于休眠状态:

int main(int, char**)
{
  while(true)
  { 
    sleep(1); // Put current thread to sleep;
    // do some work.

  }
  return 0;
}

另一方面,这将创建一个工作线程。主线程将保持活动状态。

#include <iostream>
#include <thread>

void doWork()
{
   while(true) 
   {
      // Do some work;
      sleep(1); // Rest
      std::cout << "hi from worker." << std::endl;
   }
}

int main(int, char**)
{

  std::thread worker(&doWork);
  std::cout << "hello from main thread, the worker thread is busy." << std::endl;
  worker.join();

  return 0;
}

代码未经测试。刚试过这个,看看它的实际应用:http://ideone.com/aEVFi

线程需要c ++ 11。另请注意,在上面的代码中,主线程将无限期地等待连接,因为工作线程永远不会终止。

答案 2 :(得分:0)

将循环和Thread.Sleep()放在工作线程中。