日期:2014-05-20 浏览次数:21241 次
public class ThreadPrint {
public static void main(String[] args) throws Exception {
String lock = "lock";
Thread t1 = new Thread(new Thread1(lock));
t1.start();
Thread.sleep(1000);
t1.stop();
Thread t2 = new Thread(new Thread2(lock));
t2.start();
Thread.sleep(1000);
t2.stop();
}
}
class Thread1 implements Runnable {
String lock;
public Thread1(String lock) {
this.lock = lock;
}
public void run() {
synchronized (lock) {
for (int i = 1; i < 53; i++) {
System.out.println("The first thread.-->" + i);
if (i % 2 == 0) {
try {
lock.notify();
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class Thread2 implements Runnable {
String lock;
public Thread2(String lock) {
this.lock = lock;
}
public void run() {
synchronized (lock) {
for (char i = 'A'; i < 'Z'; i++) {
try {
System.out.println("The second thread.-->" + i);
lock.notify();
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
------解决方案--------------------
Thread-0:0
Thread-1:A
Thread-0:1
Thread-0:2
Thread-1:B
Thread-0:3
Thread-0:4
Thread-1:C
Thread-0:5
Thread-0:6
Thread-1:D
Thread-0:7
Thread-0:8
Thread-1:E
Thread-0:9
Thread-0:10
Thread-1:F
Thread-0:11
Thread-0:12
Thread-1:G
Thread-0:13
Thread-0:14
Thread-1:H
Thread-0:15
Thread-0:16
Thread-1:I
Thread-0:17
Thread-0:18
Thread-1:J
Thread-0:19
Thread-0:20
Thread-1:K
Thread-0:21
Thread-0:22
Thread-1:L
Thread-0:23
Thread-0:24
Thread-1:M
Thread-0:25
Thread-0:26
Thread-1:N
Thread-0:27
Thread-0:28
Thread-1:O
Thread-0:29
从运行的结果可以知道,在Thread1 运行到30的时候,不会进入到循环了。但是,你并没有释放lock锁,而Thread2还在等待lock锁,这样就导致了,线程一直等待了。注:当调用wait()方法后,只有调用了notify()方法后才会释放锁的