Java Tutorial/Thread/Thread Join

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

Specify the number of milliseconds to wait for the death of a thread

   <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 (total < 1000) {
       System.out.print(firstName);
       sleep(aWhile);
       total += aWhile;
       System.out.print(secondName + "\n");
     }
     System.out.print(secondName + " stoped.\n");
   } catch (InterruptedException e) {
     System.out.println(firstName + secondName + e);
   }
 }
 private String firstName;
 private String secondName;
 private long aWhile;
 private long total;

} 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 {
     first.join(2000); // Wait up to 2 second for thread1 to die
   } catch (InterruptedException e) {
     e.printStackTrace();
   }
 }

}</source>



B A C a 
A b 
B a 
A c 
C a 
A b 
B a 
A b 
B c 
c  stoped.
a 
a  stoped.


Thread Join Demo

   <source lang="java">

Thread Joinclass 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 (total < 1000) {
       System.out.print(firstName);
       sleep(aWhile);
       total += aWhile;
       System.out.print(secondName + "\n");
     }
     System.out.print(secondName + " stoped.\n");
   } catch (InterruptedException e) {
     System.out.println(firstName + secondName + e);
   }
 }
 private String firstName;
 private String secondName;
 private long aWhile;
 private long total;

} 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 {
     first.join();
   } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
 }

}</source>



A B C a 
A b 
B a 
A c 
C a 
A b 
B a 
A b 
B c 
c  stoped.
a 
a  stoped.


Using join() to wait for threads to finish.

   <source lang="java">

class NewThread implements Runnable {

 String name; // name of thread
 Thread t;
 NewThread(String threadname) {
   name = threadname;
   t = new Thread(this, name);
   System.out.println("New thread: " + t);
   t.start(); // Start the thread
 }
 public void run() {
   try {
     for (int i = 5; i > 0; i--) {
       System.out.println(name + ": " + i);
       Thread.sleep(1000);
     }
   } catch (InterruptedException e) {
     System.out.println(name + " interrupted.");
   }
   System.out.println(name + " exiting.");
 }

} class DemoJoin {

 public static void main(String args[]) {
   NewThread ob1 = new NewThread("One");
   NewThread ob2 = new NewThread("Two");
   NewThread ob3 = new NewThread("Three");
   System.out.println("Thread One is alive: " + ob1.t.isAlive());
   System.out.println("Thread Two is alive: " + ob2.t.isAlive());
   System.out.println("Thread Three is alive: " + ob3.t.isAlive());
   try {
     System.out.println("Waiting for threads to finish.");
     ob1.t.join();
     ob2.t.join();
     ob3.t.join();
   } catch (InterruptedException e) {
     System.out.println("Main thread Interrupted");
   }
   System.out.println("Thread One is alive: " + ob1.t.isAlive());
   System.out.println("Thread Two is alive: " + ob2.t.isAlive());
   System.out.println("Thread Three is alive: " + ob3.t.isAlive());
   System.out.println("Main thread exiting.");
 }

}</source>





Wait for the threads to finish

   <source lang="java">

public class Main {

 public static void main(String[] args) throws Exception {
   Thread thread1 = new Thread(new TestThread(1));
   Thread thread2 = new Thread(new TestThread(2));
   thread1.start();
   thread2.start();
   thread1.join();
   thread2.join();
 }

} class TestThread implements Runnable {

 int id;
 public TestThread(int id) {
   this.id = id;
 }
 public void run() {
   for (int i = 1; i <= 10; i++) {
     System.out.println("Thread" + id + ": " + i);
   }
 }

}</source>





Wait the for the completion of a thread

   <source lang="java">

public class Main {

 public static void main(String a[]) throws Exception {
   MyThread tt1 = new MyThread(50);
   MyThread tt2 = new MyThread(75);
   Thread t1 = new Thread(tt1, "Test thread 1");
   Thread t2 = new Thread(tt2, "Test thread 2");
   t1.start();
   t2.start();
   t1.join();
   t2.join();
 }

} class MyThread implements Runnable {

 int i;
 MyThread(int i) {
   super();
   this.i = i;
 }
 public void run() {
    System.out.println(Thread.currentThread().getName() + " " + i);
 }

}</source>