(照着别人的代码打的
wait,notify实现
//wait ,notify实现,性能较差
public static int i=1;
public static final int TOTAL=100;
public static Object lock=new Object();
public static void main(String[] args) throws InterruptedException{
Thread t1=new Thread(()->{
while(i<TOTAL){
synchronized (lock){
if(i%2==1){
System.out.println("奇数线程:"+i++);
lock.notify();
}else{
try {
lock.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
});
Thread t2=new Thread(()->{
while(i<=TOTAL){
synchronized (lock){
if(i%2==0){
System.out.println("偶数线程:"+i++);
lock.notify();
}else{
try {
lock.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
});
t1.start();
t2.start();
}
CountDownLatch
//交替打印奇数偶数
//countDOwnLatch是一个同步类工具
private static AtomicInteger num=new AtomicInteger(1);
private static CountDownLatch countDownLatch=new CountDownLatch(2);//表示有两个线程
public static void main(String[] args) throws InterruptedException {
Thread t1=new Thread(){
public void run(){
while(num.intValue()<100){
if(num.intValue()%2==1){
System.out.println("奇数线程: "+num.intValue());
num.incrementAndGet();
}
countDownLatch.countDown();
}
}
};
Thread t2=new Thread(){
public void run(){
while(num.intValue()<=100){
if(num.intValue()%2==0){
System.out.println("偶数线程: "+num.intValue());
num.incrementAndGet();
}
countDownLatch.countDown();
}
}
};
t1.start();
t2.start();
countDownLatch.await();
别人的链接(https://www.jianshu.com/p/1c8e278564fb)