Synchronized 这个要知道你锁的对象是谁 

package chdy;

public class jiaotidayin {


    public static void main(String[] args){
        MyTask task = new MyTask();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 1; i < 10; i += 2 ){
                    task.prin(i);
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0; i < 10; i += 2 ){
                    task.prin(i);
                }
            }
        });
        t1.setName("线程1");
        t2.setName("线程2");
        t2.start();
        t1.start();
    }

}
class MyTask{

    public synchronized void prin(int num){
        try {
            this.notify();
            System.out.println("当前线程" + Thread.currentThread().getName() + " : " + num);
            this.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

AtomciInteger 无需用到所

public class jiaotidayin {


    public static void main(String[] args){
        AtomicInteger at = new AtomicInteger(0);

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(at.get() < 100){
                    if(at.get() % 2 == 0){
                        System.out.println(at.get());
                        at.getAndIncrement();
                    }
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(at.get() < 100){
                    if(at.get() % 2 == 1){
                        System.out.println(at.get());
                        at.getAndIncrement();
                    }
                }
            }
        });
        t1.setName("线程1");
        t2.setName("线程2");
        t2.start();
        t1.start();
    }

}

原子类交替打印ABC

public class jiaotidayin {

    public static void main(String[] args){
        AtomicInteger at = new AtomicInteger(0);

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(at.get() < 100){
                    if(at.get() % 3 == 0){
                        System.out.println("A");
                        at.getAndIncrement();

                    }
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(at.get() < 100){
                    if(at.get() % 3 == 1){
                        System.out.println("B");
                        at.getAndIncrement();
                    }
                }
            }
        });

        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(at.get() < 100){
                    if(at.get() % 3 == 2){
                        System.out.println("C");
                        at.getAndIncrement();
                    }
                }
            }
        });

        t1.setName("线程1");
        t2.setName("线程2");
        t1.start();
        t2.start();
        t3.start();
    }

}