主要目的 一个线程负责打印一个负责输入

public class Input implements Runnable{
	private Resource r;
	public Input(Resource r) {
		// TODO Auto-generated constructor stub
		this.r = r;
	}
	@Override
	public void run() {
		int i = 0;
		// TODO Auto-generated method stub
		while(true){
			
			synchronized(r){//两处同步 所用的锁不一样导致会出问题 所以此处 不要用this 而应用唯一的对象 r
				//如果flag wei true 进入等待状态   等待唤醒需要用锁对象调用
				if(r.flag){
					try {
						r.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(i%2==0){
					r.name = \"张三\";
					r.sex = \"男\";
				}else{
					r.name = \"李四\";
					r.sex = \"女\";
				}
				//降对方线程唤醒 并改变标记状态  赋值阶段
				r.flag = true;
				r.notify();
			}
			
			i++;
		}
	}

}
public class Output implements Runnable {
	private Resource r;
	Lock l = new ReentrantLock();
	public Output(Resource r) {
		// TODO Auto-generated constructor stub
		this.r = r;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true){
			synchronized(r){
				if(!r.flag){
					try {
						r.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				System.out.println(r.name +\"---\"+r.sex);
				//
				r.flag = false;
				r.notify();
			}
		}
	}

}
public class Resource {
	public String name;
	public String sex;
	public boolean flag = false;//判断使用
}
public class ThreadDemo {
	public static void main(String[] args) {
		Resource r = new Resource();
		Input in = new Input(r);
		Output ou = new Output(r);
		Thread t1 = new Thread(in);
		Thread t2 = new Thread(ou);
		t1.start();
		t2.start();
	}

}

该功能实现 :主要还是在于线程同步,以及锁对象的处理和 线程的等待 与线程唤醒

收藏 打印