自定义线程池

2018-05-08  本文已影响0人  啤酒小龙虾

直接上代码了

public class ThreadPoolUtils {

    private static final int NUMBER =1; //定义线程池中的数量

    private static ThreadPoolExecutorexecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(NUMBER);

    private static int count =0; //计数器

    private static LinkedListlinkedList =new LinkedList();

    /**

    * 判断当前线程池里面是否有线程在执行

    *

    * @return

    */

    public static void startThread(Thread thread) {

            if (count <1) {

                    count++;

                    executor.execute(thread); //执行线程池中的线程

            }else {

                linkedList.add(thread);

            }

       }

      /**

    * 工作线程

    */

        public static abstract class Threadimplements Runnable {

                @Override

                public void run() {

                    //语音播报

                        work(); //这里实现 你要实现线程方法

                    //计数器--

                MyAPP.getHandler().post(new Runnable() {

                        @Override

                        public void run() {

                            Thread thread =linkedList.pollFirst();

                            if (thread !=null) {

                                startThread(thread);

                            }

                            count--;

                        }

                   });

           }

        //语音播报的方法 谁用谁调用

        public abstract void work();

}

然后写一个类实现 线程方法

public class YuYin extends ThreadPoolUtils.Thread {

        @Override

        public void work() {

                try {

                        Thread.sleep(2000);  //模拟耗时操作

                }catch (InterruptedException e) {

                        e.printStackTrace();

                 }

                //语音播报

                   Log.d("11", "dsfsadfds");

                }

}

上一篇 下一篇

猜你喜欢

热点阅读