public class Test1 {
public static void main(String[] args) {
MyNumber number=new MyNumber();
Thread1 thread1= new Thread1(number);
Thread2 thread2 = new Thread2(number);
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread2);
t1.setName("奇数线程");
t2.setName("偶数线程");
t1.start();
t2.start();
}
}
class Thread1 implements Runnable{
private MyNumber num;
public Thread1(MyNumber num) {
this.num = num;
}
@Override
public void run() {
while(true){
synchronized (num){
if(num.num%2==0){
try {
num.notifyAll();
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+num.num++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Thread2 implements Runnable{
private MyNumber num;
public Thread2(MyNumber num) {
this.num = num;
}
@Override
public void run() {
while(true){
synchronized (num){
if(num.num%2!=0){
try {
num.notifyAll();
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+num.num++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class MyNumber{
int num=1;
}