返回顶部

java一个简单的线程池小例子

public class ExecutorTest {
/**
* 默认开启的线程数,
* 最大线程数,
* 所有线程都执行完毕后多长时间关闭线程池,
* 时间类型(秒、毫秒),
* 消息队列最大数量
*/
static ThreadPoolExecutor fixedThreadPool = new ThreadPoolExecutor(4,4,5000L,
TimeUnit.MILLISECONDS,new ArrayBlockingQueue(1024));

public static void main(String[] args) {

// ThreadPoolExecutor
fixTheadPoolTest();

    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    fixTheadPoolTest();
}
/**
 * 1.创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小<br>
 * 2.线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程<br>
 * 3.因为线程池大小为4,每个任务输出index后sleep 2秒,所以每两秒打印4个数字,和线程名称<br>
 */
public static void fixTheadPoolTest() {
    fixedThreadPool.allowCoreThreadTimeOut(true);
    for (int i = 0; i < 10; i++) {
        final int ii = i;
        fixedThreadPool.execute(() -> {
            System.out.println("线程名称:" + Thread.currentThread().getName() + ",执行" + ii);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }
    System.out.println("===========================");
}

}

posted @ 2020-11-10 08:33  豪shr  阅读(84)  评论(0编辑  收藏  举报