java核心-多线程-线程池-ThreadPoolExecutor

1.java多线程编程少不了使用线程池,线程池相关的工具类所在jdk包,java.util.concurrent

2.使用示例
demo1

public class ThreadPoolDemo {
    /*
    本示例使用线程池实现两个线程交替打应数字,直到10
     */
    private static Object obj1 = new Object();
    private static int num = 0;

    public static void main(String[] args){
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 2, 10000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
        //打印奇数线程
        threadPoolExecutor.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("奇数run");
                while (true){
                    synchronized (obj1){
                        if(num > 10){
                            break;
                        }
                        System.out.println("奇数抢到" + num);
                        if(num/2 != 0){
                            System.out.println("奇:" + num);
                            num++;
                            obj1.notifyAll();
                        }else{
                            try {
                                System.out.println("奇数线程等待");
                                obj1.wait();   //wait会让出锁;
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        });
        //打印偶数线程
        threadPoolExecutor.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("偶数run");
                while(true){
                    synchronized (obj1){
                        if(num > 10){
                            break;
                        }
                        System.out.println("偶数抢到" + num);
                        if(num/2 == 0){
                            System.out.println("偶:" + num);
                            num++;
                            obj1.notifyAll();
                        }else{
                            try {
                                System.out.println("偶数线程等待");
                                obj1.wait();   //wait会让出锁;
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        });
    }
}

意外发生了,我发现我随手写的代码是垃圾,下面是运行结果

分析一下结果

猜你喜欢

转载自www.cnblogs.com/leeethan/p/12126298.html