How do you kill a Thread in Java?

前端 未结 16 1900
天命终不由人
天命终不由人 2020-11-21 05:54

How do you kill a java.lang.Thread in Java?

相关标签:
16条回答
  • 2020-11-21 06:50

    'Killing a thread' is not the right phrase to use. Here is one way we can implement graceful completion/exit of the thread on will:

    Runnable which I used:

    class TaskThread implements Runnable {
    
        boolean shouldStop;
    
        public TaskThread(boolean shouldStop) {
            this.shouldStop = shouldStop;
        }
    
        @Override
        public void run() {
    
            System.out.println("Thread has started");
    
            while (!shouldStop) {
                // do something
            }
    
            System.out.println("Thread has ended");
    
        }
    
        public void stop() {
            shouldStop = true;
        }
    
    }
    

    The triggering class:

    public class ThreadStop {
    
        public static void main(String[] args) {
    
            System.out.println("Start");
    
            // Start the thread
            TaskThread task = new TaskThread(false);
            Thread t = new Thread(task);
            t.start();
    
            // Stop the thread
            task.stop();
    
            System.out.println("End");
    
        }
    
    }
    
    0 讨论(0)
  • 2020-11-21 06:51

    Here are a couple of good reads on the subject:

    What Do You Do With InterruptedException?

    Shutting down threads cleanly

    0 讨论(0)
  • 2020-11-21 06:52

    There is of course the case where you are running some kind of not-completely-trusted code. (I personally have this by allowing uploaded scripts to execute in my Java environment. Yes, there are security alarm bell ringing everywhere, but it's part of the application.) In this unfortunate instance you first of all are merely being hopeful by asking script writers to respect some kind of boolean run/don't-run signal. Your only decent fail safe is to call the stop method on the thread if, say, it runs longer than some timeout.

    But, this is just "decent", and not absolute, because the code could catch the ThreadDeath error (or whatever exception you explicitly throw), and not rethrow it like a gentlemanly thread is supposed to do. So, the bottom line is AFAIA there is no absolute fail safe.

    0 讨论(0)
  • 2020-11-21 06:55

    The question is rather vague. If you meant “how do I write a program so that a thread stops running when I want it to”, then various other responses should be helpful. But if you meant “I have an emergency with a server I cannot restart right now and I just need a particular thread to die, come what may”, then you need an intervention tool to match monitoring tools like jstack.

    For this purpose I created jkillthread. See its instructions for usage.

    0 讨论(0)
提交回复
热议问题