多线程同步问题
程序员文章站
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();
}
}
上一篇: Spring Boot-事件监听
下一篇: 多线程的同步问题