通过这个例题学到了很多,记录下来便于以后常看,<线程通信>
/*
* 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印 顺序为12A34B56C……5152Z>
*/
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object obj = new Object();
Shuzi s = new Shuzi(obj);
Zimu z = new Zimu(obj);
Thread th1 = new Thread(s);
Thread th2 = new Thread(z);
th1.start();//数字的线程先运行,数字先执行
th2.start();
/*th2.start();
* th1.start();字母的线程先运行,则先执行字母
*/
}
}
class Shuzi implements Runnable{
private Object obj;//声明一个类的引用
public Shuzi(Object obj){
this.obj = obj; //通过构造器将共享的资源-->对象传进来
}
@Override
public void run() {
synchronized(obj){//给共享资源上锁
for(int i = 1;i < 53;i++ ){
System.out.println(i);
if(i % 2 == 0){
obj.notifyAll();//唤醒其他线程
try {
obj.wait();//等待并释放锁
} catch (Interrup