class Res{ String name; String sex; boolean b = false; }
class Thread1 implements Runnable{ Res r; public Thread1(Res r) { this.r = r; } @Override public void run() { // TODO Auto-generated method stub int flag = 0; while(true) { synchronized (r) { if(r.b) try {r.wait();} catch (Exception e) {} if(flag == 0){ r.name = "Tom"; r.sex = "M"; }else { r.name = "Hanmeimei"; r.sex = "F"; } flag = (flag + 1)%2; r.b = true; r.notify(); } } } }
class Thread2 implements Runnable{ Res r; public Thread2(Res r) { this.r = r; } @Override public void run() { // TODO Auto-generated method stub int flag = 0; while(true) { synchronized (r) { if(!r.b) try {r.wait();} catch (Exception e) {} System.out.println(r.name + " " + r.sex); r.b = false; r.notify(); } } }
}
public class TestSyn { public static void main(String[] args) { // TODO Auto-generated method stub Res r = new Res(); new Thread(new Thread1(r)).start(); new Thread(new Thread2(r)).start(); }