多线程练习——同步之前

package 多线程;

public class Threadcommunicate {

	public static void main(String[] args) {
		info mess= new info();
		input in = new input(mess);
		output out = new output(mess);
		new Thread(in).start();
		new Thread(out).start();
	}

}
class info{
	String name;
	String sex;
}
class input implements Runnable{
	info info;
	int x = 0;
	public input(info info) {
		this.info=info;
	}
	@Override
	public void run() {
		while (true) {
			
			if (x==0) {
				info.name = "demo";
				info.sex = "man";
			} else {
				info.name = "莉莉";
				info.sex = "女生";	
			}
			x=(x+1)%2;
		}
	}
}
class output implements Runnable{
	info info;
	public output(info info) {
		this.info=info;
	}
	public void run() {
		while (true) {
			System.out.println("名字:"+info.name+"性别:"+info.sex);
		}
	}
}

/*
 * 输出
 名字:demo性别:man
名字:demo性别:女生
名字:demo性别:女生
名字:demo性别:man
名字:莉莉性别:man
名字:莉莉性别:女生
名字:莉莉性别:man
名字:莉莉性别:man
名字:莉莉性别:女生

原因:线程执行权的随机性,,当线程Input执行完name的时候  执行权被out夺走 
直接输出name和上次的sex导致 人所对的性别出错
*/



本文出自 “要么拼命,要么滚回去!” 博客,请务必保留此出处http://jiangzuun2014.blog.51cto.com/8732469/1440593

多线程练习——同步之前

上一篇:c语言函数实现交换两个数的值


下一篇:Java注解介绍