猿问

一个java多线程问题

public class Resource {
	String name;
	String sex;
	boolean flag = false;
	int x = 0;
	
	public synchronized void set(String name, String sex){
		while (flag)
			try{
				this.wait();
			}catch(InterruptedException e){}
		
		this.name = name;
		this.sex = sex;
		flag = true;
		this.notifyAll();
		x = (x+1)%2;
	}
	
	public synchronized void out(){
		while (!flag)
			try{
				this.wait();
			}catch(InterruptedException e){}
		
		System.out.println(name+"...."+sex);
		flag = false;
		this.notifyAll();
	}
	
	

}
-----------------------------------------------------------------------------------------

public class Input implements Runnable {
	Resource r;
	int x = 0;
	
	Input(Resource r){
		this.r = r;
	}

	@Override
	public void run() {
		
		
		while (true){
			if (r.x == 0)
				r.set("mike", "man");
			else
				r.set("丽丽", "女女女女女女女女");
		}
	}

}
--------------------------------
public class Output implements Runnable {
	Resource r;
	
	Output(Resource r)
	{
		this.r = r;
	}

	@Override
	public void run() {
		while(true)
		{
			
				r.out();
			
		}
	}

}
----------------------
public class ResourceDemo {

	public static void main(String[] args) {
		Resource r = new Resource();
		
		Input in = new Input(r);
		Output out = new Output(r);
		
		Thread t1 = new Thread(in);
		Thread t3 = new Thread(in);
		Thread t5 = new Thread(in);
		Thread t6 = new Thread(in);
		Thread t7 = new Thread(in);
		Thread t8 = new Thread(in);
		Thread t9 = new Thread(in);
		Thread t10 = new Thread(in);
		Thread t11 = new Thread(in);
		Thread t12 = new Thread(in);
		Thread t2 = new Thread(out);
		Thread t4 = new Thread(out);
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
		t6.start();
		t7.start();
		t8.start();
		t9.start();
		t10.start();
		t11.start();
		t12.start();
		

	}

}

运行结果:

我想要的结果是丽丽   和  Mike   交替出现,

为什么会出现这种  重复出现丽丽   又重复出现Mike  的现象呢?    求大神分析一下


我要变大神大神大大神
浏览 1351回答 3
3回答

我要变大神大神大大神

变成自问自答了

我要变大神大神大大神

分析了一下午,发现问题就是出自这里。

杜牧之

那你可以使用下wait()跟notify(),使一线程运行完毕进入等待状态,唤醒二线程.这样交替等待-唤醒
随时随地看视频慕课网APP

相关分类

Java
我要回答