Java Tutorial/Thread/Thread Stop
Содержание
Stopping a Thread: Use boolean value to stop a thread
<source lang="java">
class CounterThread extends Thread {
public boolean stopped = false; int count = 0; public void run() { while (!stopped) { try { sleep(1000); } catch (InterruptedException e) { } System.out.println(count++); ; } }
} public class MainClass {
public static void main(String[] args) { CounterThread thread = new CounterThread(); thread.start(); try { Thread.sleep(10000); } catch (InterruptedException e) { } thread.stopped = true; System.out.println("exit"); }
}</source>
0 1 2 3 4 5 6 7 8 9 exit
Stopping a Thread with interrupt()
<source lang="java">
class TryThread extends Thread {
public TryThread(String firstName, String secondName, long delay) { this.firstName = firstName; this.secondName = secondName; aWhile = delay; setDaemon(true); } public void run() { try { while (true) { System.out.print(firstName); sleep(aWhile); System.out.print(secondName + "\n"); } } catch (InterruptedException e) { System.out.println(firstName + secondName + e); } } private String firstName; private String secondName; private long aWhile;
} public class MainClass {
public static void main(String[] args) { Thread first = new TryThread("A ", "a ", 200L); Thread second = new TryThread("B ", "b ", 300L); Thread third = new TryThread("C ", "c ", 500L); first.start(); second.start(); third.start(); try { Thread.sleep(3000); first.interrupt(); second.interrupt(); third.interrupt(); } catch (Exception e) { System.out.println(e); } }
}</source>
A B C a A b B a A c C a A b B a A b B c a C A a A b B a A c C b B a A a A b B c C a A b B a A a A b B c C a A b B a A c B b java.lang.InterruptedException: sleep interrupted C A a java.lang.InterruptedException: sleep interrupted C c java.lang.InterruptedException: sleep interrupted
Suspend, resume, and stop a thread.
<source lang="java">
class MyThread implements Runnable {
Thread thrd; boolean suspended; boolean stopped; MyThread(String name) { thrd = new Thread(this, name); suspended = false; stopped = false; thrd.start(); } public void run() { try { for (int i = 1; i < 10; i++) { System.out.print("."); Thread.sleep(50); synchronized (this) { while (suspended) wait(); if (stopped) break; } } } catch (InterruptedException exc) { System.out.println(thrd.getName() + " interrupted."); } System.out.println("\n" + thrd.getName() + " exiting."); } synchronized void stop() { stopped = true; suspended = false; notify(); } synchronized void suspend() { suspended = true; } synchronized void resume() { suspended = false; notify(); }
} public class Main {
public static void main(String args[]) throws Exception { MyThread mt = new MyThread("MyThread"); Thread.sleep(100); mt.suspend(); Thread.sleep(100); mt.resume(); Thread.sleep(100); mt.suspend(); Thread.sleep(100); mt.resume(); Thread.sleep(100); mt.stop(); }
}</source>
To determine whether a thread has been interrupted
<source lang="java">
class TryThread extends Thread {
public TryThread(String firstName, String secondName, long delay) { this.firstName = firstName; this.secondName = secondName; aWhile = delay; setDaemon(true); } public void run() { try { while (true) { System.out.print(firstName); sleep(aWhile); System.out.print(secondName + "\n"); } } catch (InterruptedException e) { System.out.println(firstName + secondName + e); } } private String firstName; private String secondName; private long aWhile;
} public class MainClass {
public static void main(String[] args) { Thread first = new TryThread("A ", "a ", 200L); Thread second = new TryThread("B ", "b ", 300L); Thread third = new TryThread("C ", "c ", 500L); first.start(); second.start(); third.start(); try { Thread.sleep(3000); } catch (Exception e) { System.out.println(e); } first.interrupt(); second.interrupt(); third.interrupt(); if (first.isInterrupted()) { System.out.println("First thread has been interrupted."); } }
}</source>
A B C a A b B a A c C a A b B a A b B c C a A a A b B a A c C b B a A a A b B c C a A b B a A a A b B c C a A b B a A c C C c java.lang.InterruptedException: sleep interrupted First thread has been interrupted. B b java.lang.InterruptedException: sleep interrupted A a java.lang.InterruptedException: sleep interrupted