Java-线程池的使用

//缓存线程池
//特性:灵活回收空闲线程, 没有则创建
private static void testCachedThreadPool() {
    ExecutorService service = Executors.newCachedThreadPool();
    for (int i = 0; i < 10; i++) {
        final int index = i;
        service.execute(new Runnable() {
            @Override
            public void run() {
                Log.e("TAG", "Thread=" + Thread.currentThread().getName() + " index=" + index);
            }
        });
    }
    service.shutdown();
}

//单一线程池
//特性:只会创建一个线程,保证所有任务按照指定顺序执行
private static void testSingleThreadExecutor() {
    ExecutorService service = Executors.newSingleThreadExecutor();
    for (int i = 0; i < 10; i++) {
        final int index = i;
        service.execute(new Runnable() {
            @Override
            public void run() {
                Log.e("TAG", "Thread=" + Thread.currentThread().getName() + " index=" + index);
            }
        });
    }
}

//单一线程池
//特性:只会创建一个线程,可以控制线程的定时和执行周期
private static void testSingleThreadScheduledExecutor() {
    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();

    //定时3秒后执行run方法
//        service.schedule(new Runnable() {
//            @Override
//            public void run() {
//                Log.e("TAG", "Thread=" + Thread.currentThread().getName());
//            }
//        }, 3, TimeUnit.SECONDS);

    //定时2秒后执行, 每隔3秒执行一次run方法
    service.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            Log.e("TAG", "Thread=" + Thread.currentThread().getName());
        }
    }, 2, 3, TimeUnit.SECONDS);

    //停止任务
    //service.shutdown();
}

//定长线程池
//特性:可控制最大并发数,超出线程数量会在队列中等待
private static void testFixedThreadPool() {
    ExecutorService service = Executors.newFixedThreadPool(3);
    for (int i = 0; i < 10; i++) {
        final int index = i;
        service.execute(new Runnable() {
            @Override
            public void run() {
                Log.e("TAG", "Thread=" + Thread.currentThread().getName() + " index=" + index);
            }
        });
    }
}

//定长线程池
//特性:可控制最大并发数,可以控制线程的定时和执行周期,超出线程数量会在队列中等待
private static void testScheduledThreadPool() {
    ScheduledExecutorService service = Executors.newScheduledThreadPool(3);

    //定时3秒后执行run方法
//        service.schedule(new Runnable() {
//            @Override
//            public void run() {
//                Log.e("TAG", "Thread=" + Thread.currentThread().getName());
//            }
//        }, 3, TimeUnit.SECONDS);

    //定时2秒后执行, 每隔3秒执行一次run方法
    service.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            Log.e("TAG", "Thread=" + Thread.currentThread().getName());
        }
    }, 2, 3, TimeUnit.SECONDS);

    //停止任务
    //service.shutdown();
}

你可能感兴趣的:(Java-线程池的使用)