算法篇 - 交替打印奇偶数

题目

交替打印奇偶数

 

资源实体

public class Num {

    int i = 1;

    // true: 打印奇数   false: 打印偶数
    boolean flag = true;

}

 

打印奇数线程

public class PrintOddThread implements Runnable {
    private final Num num;

    public PrintOddThread(Num num) {
        this.num = num;
    }

    @Override
    public void run() {
        while (num.i < 10000) {
            synchronized (num) {
                if (num.flag) {
                    System.out.println("奇数\t" + num.i);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    num.i++;
                    num.flag = false;
                } else {
                    try {
                        num.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

 

打印偶数线程

public class PrintEvenThread implements Runnable {
    private final Num num;

    public PrintEvenThread(Num num) {
        this.num = num;
    }

    @Override
    public void run() {
        while (num.i < 10000) {
            synchronized (num) {
                if (!num.flag) {
                    System.out.println("偶数\t" + num.i);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    num.i++;
                    num.flag = true;
                } else {
                    num.notify();
                }
            }
        }
    }
}

 

主函数

public class App {

    public static void main(String[] args) throws IOException {

        ExecutorService executor = Executors.newFixedThreadPool(2);

        Num num = new Num();

        executor.execute(new PrintOddThread(num));
        executor.execute(new PrintEvenThread(num));
		
		executor.shutdown();
    }

}

 

运行结果

奇数	1
偶数	2
奇数	3
偶数	4
奇数	5
偶数	6
奇数	7
偶数	8
奇数	9
偶数	10
奇数	11
偶数	12
奇数	13
偶数	14
奇数	15
偶数	16
奇数	17
偶数	18
奇数	19
偶数	20
......

你可能感兴趣的:(算法)