Java Tutorial/Thread/Thread Stop

Материал из Java эксперт
Перейти к: навигация, поиск

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