package com.xinhai.myThread;
public class OneThread {
private TwoThread two;
public synchronized void oneThreadA() {
System.out.println("oneThreadA");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
two.twoThreadA();
}
public synchronized void oneThreadB() {
System.out.println("oneThreadB");
}
public TwoThread getTwo() {
return two;
}
public void setTwo(TwoThread two) {
this.two = two;
}
public static void main(String[] args) {
OneThread one=new OneThread();
TwoThread two=new TwoThread();
one.setTwo(two);
two.setOne(one);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
one.oneThreadA();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
two.twoThreadB();
}
}).start();
}
}
package com.xinhai.myThread;
public class TwoThread {
private OneThread one;
public synchronized void twoThreadA() {
System.out.println("twoThreadA");
}
public synchronized void twoThreadB() {
System.out.println("twoThreadB");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
one.oneThreadB();
}
public OneThread getOne() {
return one;
}
public void setOne(OneThread one) {
this.one = one;
}
}