文件:ThreadDemo.java
-----------------------------------------------------------
public class ThreadDemo {
public static void main(String[] args) {
Object obj = new Object();
ThreadA ta = new ThreadA(obj);
ThreadB tb = new ThreadB(obj);
ThreadC tc = new ThreadC(obj, ta, tb);
ta.start();
tb.start();
tc.start();
}
}
// 线程A
class ThreadA extends Thread {
private Object obj;
public ThreadA(Object obj) {
this.obj = obj;
}
public void run() {
System.out.println("A Start");
synchronized(obj) {
try {
obj.wait();
} catch(Exception e) {
e.printStackTrace();
}
}
System.out.println("A End");
}
}
// 线程B
class ThreadB extends Thread {
private Object obj;
public ThreadB(Object obj) {
this.obj = obj;
}
public void run() {
System.out.println("B Start");
synchronized(obj) {
try {
obj.wait();
} catch(Exception e) {
e.printStackTrace();
}
}
System.out.println("B End");
}
}
// 线程C
class ThreadC extends Thread {
private Object obj;
private ThreadA ta;
private ThreadB tb;
public ThreadC(Object obj, ThreadA ta, ThreadB tb) {
this.obj = obj;
this.ta = ta;
this.tb = tb;
}
public void run() {
System.out.println("C Start");
synchronized(obj) {
try {
sleep(1000);
obj.notifyAll();
} catch(Exception e) {
e.printStackTrace();
}
}
while(ta.isAlive() && tb.isAlive()); // 判断A线程和B线程是否已经结束
System.out.println("C End");
}
}
谁出的题啊,真差劲,对于了解线程一点帮助也没有。不过还是帮你做一下吧。
import java.util.logging.Level;
import java.util.logging.Logger;
public class ThreadTest {
public static void main(String[] args) {
final AB a = new AB('A');
final AB b = new AB('b');
Thread c = new Thread(new Runnable(){
public void run() {
try {
System.out.println("C sleeping");
Thread.sleep(2000);
} catch (InterruptedException ex) {
ex.printStackTrace();
System.exit(1);
}
synchronized(a) {
a.notifyAll();
}
synchronized(b) {
b.notifyAll();
}
while(a.isAlive() && b.isAlive()) {
//等待a,b的结束
}
}
});
a.start();
b.start();
c.start();
}
}
class AB extends Thread {
private char id;
public AB(char c) {
id = c;
}
public void run() {
synchronized (this) {
try {
System.out.println(id+" start");
wait();
System.out.println(id+" END");
} catch (InterruptedException ex) {
ex.printStackTrace();
System.exit(1);
}
}
}
}