欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多线程同步问题

程序员文章站 2022-05-02 12:06:42
...

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();
	}

}