Java多线程同步锁
公用资源类Resource
public class Resource { private String name; private String sex; private boolean flag = false; //false表示未填数据,true表示已填数据 public synchronized void set(String name,String sex) //同步函数使用的锁是本实例对象即this { if(flag) try{this.wait();}catch(InterruptedException e){} this.name = name; this.sex = sex; flag = true; this.notify(); } public synchronized void out() { if(!flag) try{this.wait();}catch(InterruptedException e){} System.out.println("姓名是: "+name+" 性别为"+sex); flag = false; this.notify(); } }
负责向资源类填数据的Input类
public class Input implements Runnable { private Resource r; public Input(Resource r) { this.r = r; } @Override public void run() { int x =0 ; while(true) { if(x==0) r.set("张三", "男"); else r.set("赵丽", "女"); x=(x+1)%2; } } }
负责从资源类中读数据的OutPut类
public class OutPut implements Runnable { private Resource r; public OutPut(Resource r) { this.r = r; } @Override public void run() { while(true) r.out(); } }
测试类
import org.junit.Test; public class Client { Resource r = new Resource(); Input i = new Input(r); OutPut o = new OutPut(r); Thread t1 = new Thread(i); Thread t2 = new Thread(o); @Test public void clientTest() { t1.start(); t2.start(); } }