MENU

Tkning Home

欢迎来到Tkning的家

记录大佬写的 - 线程池Demo

一、原理

通过使用ExecutorService和Executor两个类里面的Executors去新建一个newFixedThreadPool。然后再用submit方法提交业务代码到线程池。

二、 解释

举个生动的例子:时间管理

类比于现在有一个烧水、洗澡、刷牙、洗脸、玩游戏、睡觉的流程。

a.先声明一个线程池,让改程序能够满足`多任务同时进行的能力`即拥有两只手。
b.然后在它洗澡的时候让这个任务申请使用 `另外一只手`,让另外这只手去处理 `刷牙` 的操作。

三、代码

本处仅展示executService类的写法:

public class TestPool{
	public static void main(String[] args) throws InterruptedException {
        System.out.println("申请打开线程池");
        ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

        executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程1开始");
                // 线程内容
                try {
                    System.out.println("线程2开始");
                    for (int i = 0; i < 5; i++) {
                        Thread.sleep(5000);
                        System.out.println("2."+i);
                    }
                    System.out.println("线程2结束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("线程1结束");
            }
        });

        System.out.println("线程3开始");
        for (int i = 0; i < 5; i++) {
            Thread.sleep(2000);
            System.out.println(i);
        }
        System.out.println("线程3结束");
		
        System.out.println("线程4开始");
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                // 线程内容
                try {
                    System.out.println("线程5开始");
                    for (int i = 0; i < 5; i++) {
                        Thread.sleep(3000);
                        System.out.println("4."+i);
                    }
                    System.out.println("线程5结束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        System.out.println("线程4结束");

        System.out.println("关闭线程池");
        executorService.shutdown();

    }
}
posted @ 2022-05-25 10:41  Tkning_Jing  阅读(97)  评论(0)    收藏  举报