管理线程的最佳方式?

时间:2014-02-16 22:08:18

标签: java multithreading

在Java中启动,暂停,恢复和停止线程的最佳方法是什么? 我写了一些代码进行测试,它的工作原理我想要的,但我不确定这是不是最好的方法。 如果有很多线程像这样,那么当它们一直在检查运行和暂停时是否会浪费大量资源?

public class ThreadTest {
   public static void main(String[] args) {
      try {
         Counter t = new Counter();
         t.start();
         Thread.sleep(4000);
         t.pause();
         Thread.sleep(5000);
         t.pause();
         Thread.sleep(4000);
         t.finish();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

class Counter extends Thread {

   int c;
   boolean run, pause;

   public Counter() {
      c = 0;
   }

   public void run() {
      run = true;
      while (run == true) {
         if (!pause) {
            c++;
            System.out.println(c);
            try {
               Thread.sleep(1000);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      }
      System.out.println("Stop!");
   }

   public void finish() {
      run = false;
   }

   public void pause() {
      pause = !pause;
   }

}

1 个答案:

答案 0 :(得分:1)

  

在Java中启动,暂停,恢复和停止线程的最佳方法是什么?如果有很多线程像这样,那么当它们一直在检查运行和暂停时是否会浪费大量资源?

最好的方法是不显式启动和暂停线程。你是对的,这是浪费时间。

当线程在流,end of a producer/consumer queue或其他有助于并发的数据结构上阻塞自身时,操作系统应自动完成线程暂停。