How to stop a thread created by implementing runnable interface?

前端 未结 6 2218
独厮守ぢ
独厮守ぢ 2020-11-27 13:08

I have created class by implementing runnable interface and then created many threads(nearly 10) in some other class of my project.
How to stop some of those threads?

6条回答
  •  悲&欢浪女
    2020-11-27 13:43

    How to stop a thread created by implementing runnable interface?

    There are many ways that you can stop a thread but all of them take specific code to do so. A typical way to stop a thread is to have a volatile boolean shutdown field that the thread checks every so often:

      // set this to true to stop the thread
      volatile boolean shutdown = false;
      ...
      public void run() {
          while (!shutdown) {
              // continue processing
          }
      }
    

    You can also interrupt the thread which causes sleep(), wait(), and some other methods to throw InterruptedException. You also should test for the thread interrupt flag with something like:

      public void run() {
          while (!Thread.currentThread().isInterrupted()) {
              // continue processing
              try {
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  // good practice
                  Thread.currentThread().interrupt();
                  return;
              }
          }
      }
    

    Note that that interrupting a thread with interrupt() will not necessarily cause it to throw an exception immediately. Only if you are in a method that is interruptible will the InterruptedException be thrown.

    If you want to add a shutdown() method to your class which implements Runnable, you should define your own class like:

    public class MyRunnable implements Runnable {
        private volatile boolean shutdown;
        public void run() {
            while (!shutdown) {
                ...
            }
        }
        public void shutdown() {
            shutdown = true;
        }
    }
    

提交回复
热议问题