Java Tutorial/Thread/Thread Join
Содержание
Specify the number of milliseconds to wait for the death of a thread
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();
}
}
}
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
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();
}
}
}
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.
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.");
}
}
Wait for the threads to finish
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);
}
}
}
Wait the for the completion of a thread
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);
}
}