Java 线程池入门介绍

Java线程池表示一组等待作业并多次重用的工作线程。在线程池的情况下,将创建一组固定大小的线程。我们可以从线程池中取出一个线程并分配一个作业。作业完成后,线程将会归还到线程池中。

1、Java 线程池入门

学习线程池技术,先从最简单的两个线程池方法入手,如下所示,从而开门见山,领略线程池的魅力。

  • newFixedThreadPool(ints):该方法创建一个固定大小的线程池。
  • newSingleThreadExecutor():该方法创建一个新线程。

2、Java 线程池应用介绍

2.1、编写任务类

class Task implements Runnable
{

    private String message;

    public Task(String s)
    {
        this.message = s;
    }

    public void run()
    {
        System.out.println(Thread.currentThread().getName() + " Start:message = " + message);
        processmessage();
        System.out.println(Thread.currentThread().getName() + " End!");
    }

    private void processmessage()
    {
        try
        {
            Thread.sleep(2000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

}

2.2、将任务扔到线程池中进行执行

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolDemo
{

    public static void main(String[] args)
    {

        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++)
        {
            Task task = new Task("" + i);
            executor.execute(task);
        }
        executor.shutdown();
        while (!executor.isTerminated())
        {
        }

        System.out.println("Finished all threads");

    }

}

3、思考题

请大家思考一下:继承Thread和实现Runnable接口都可以新启动一个线程,这两种方法的区别是什么呢?感兴趣的话,可以私下找我沟通。再请大家思考一下,为什么本文的题目为“入门介绍”?你能否感受到此文对你的重要意义吗?

4、参考:

https://www.javatpoint.com/java-thread-pool