多线程同步问题

1.Resource.java

 

package ThreadTongXin;

public class Resource {
	public String name="ru";
	public String sex="nan";
}

 

2. Input.java输入数据的线程方法类

 

 

package ThreadTongXin;

public class Input implements Runnable{
	Resource r;
	public Input(Resource r) {
		this.r = r;
	}
	public void run() {
		int x=0;
		while(true){
			//解决对同一对象操作的线程同步问题(输入和输出都是对同一个对象操作,比且保证在输入时,
			//不能输出,输出时不能输入)
			//这里锁定r对象,避免输入输出时的错乱问题
			synchronized(r){
				if(x==0){
					r.name="mike";
					r.sex="男";
				}else{
					r.name="lily";
					r.sex="gril";
				}
				x=(x+1)%2;
			}
		}
	}
	
}

 

3.Output.java(输出数据的方法类)

package ThreadTongXin;

public class Output implements Runnable{
	Resource r;
	public Output(Resource r){
		this.r=r;
	}
	public void run() {
		while(true){
			//解决对同一对象操作的线程同步问题(输入和输出都是对同一个对象操作,比且保证在输入时,
			//不能输出,输出时不能输入)
			//这里锁定r对象,避免输入输出时的错乱问题
			synchronized(r){
				System.out.println(r.name+"*********"+r.sex);
			
			}
		}
		
	}
	
}
 

 

4.ResourceTest.java

 

package ThreadTongXin;

import static org.junit.Assert.*;

import org.junit.Test;

public class ResourceTest {

	@Test
	public void test() {
		Resource r=new Resource();
		Input in=new Input(r);
		Output out=new Output(r);
		Thread t1=new Thread(in);
		Thread t2=new Thread(out);
		t1.start();
		t2.start();
	}

}
 

 

你可能感兴趣的:(线程同步)