多线程join相关样例,接力棒
不用join操作,也能实现接力棒功能
package com.zhy;
class A extends Thread{
@Override
public void run() {
System.out.println("A选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new B().start();
}
}
class B extends Thread{
@Override
public void run() {
System.out.println("B选手接到A选手的棒");
System.out.println("B选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new C().start();
}
}
class C extends Thread{
@Override
public void run() {
System.out.println("C选手接到B选手的棒");
System.out.println("C选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new D().start();
}
}
class D extends Thread{
@Override
public void run() {
System.out.println("D选手接到C选手的棒");
System.out.println("D选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Run {
public static void main(String[] args) throws InterruptedException {
A a=new A();
a.start();
}
}
A选手跑啊跑。。。
B选手接到A选手的棒
B选手跑啊跑。。。
C选手接到B选手的棒
C选手跑啊跑。。。
D选手接到C选手的棒
D选手跑啊跑。。。
加上join操作来确保执行的顺序
package com.zhy;
class A extends Thread{
@Override
public void run() {
System.out.println("A选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class B extends Thread{
@Override
public void run() {
System.out.println("B选手接到A选手的棒");
System.out.println("B选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class C extends Thread{
@Override
public void run() {
System.out.println("C选手接到B选手的棒");
System.out.println("C选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class D extends Thread{
@Override
public void run() {
System.out.println("D选手接到C选手的棒");
System.out.println("D选手跑啊跑。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Run {
public static void main(String[] args) throws InterruptedException {
A a=new A();
B b=new B();
C c=new C();
D d=new D();
a.start();
a.join();
b.start();
b.join();
c.start();
c.join();
d.start();
}
}
A选手跑啊跑。。。
B选手接到A选手的棒
B选手跑啊跑。。。
C选手接到B选手的棒
C选手跑啊跑。。。
D选手接到C选手的棒
D选手跑啊跑。。。
join方法的作用是,当前线程必须等待被调用join方法的对象线程执行完