2014-02-16 103 views
-1

在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

你应该缩进代码,更容易阅读 – Coffee

+1

请编辑你的问题。所有左对齐的代码都很难阅读。 –

+1

好的,我已经编辑了你的代码,但是在将来,为了使你的问题和代码容易理解而付出的努力应该落在你身上。请记住这一点。 –

回答

1

什么是开始,暂停,恢复,并停止在Java线程的最佳方式?如果有许多线程正在进行这样的工作,那么当它们检查运行并且一直停顿时,是不是会浪费大量资源?

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

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

相关问题