java中线程池的使用

impl类 implements Runnable:

 

package 线程池;

public class Impl implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"创建了新的线程");
    }
}

 

 

 

demo测试类:

package 线程池;

//线程池就是一个集合,一个容器,可以使用LinkedList<Thread> 或者ArrayList<Thread>
//使用线程的时候,就从线程池(集合)中获取一个Thread th,用完再还回去(重新放回集合之中)

//jdk1.5后内置了线程池

//线程池中的线程可以重复多次使用

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

/**
 * 线程池:是jdk1.5之后提供的,
 * java.util.concurrent.Executors是线程的工厂类,用于生产线程池
 * 该类中有个生产线程池的方法: 生产指定线程数量的线程池:static ExecutorService newFixedThreadPool(int threadNum);//返回值为接口类型
 * 可以使用ExecutorService接收,(面向接口编程)
 * <p>
 * java.util.concurrent.ExecutorService是线程池的接口
 * 用于从线程池中获取线程调用start方法执行线程任务: submit(Runnable task)
 * 关闭或销毁线程池的方法: shutdown()
 * <p>
 * 线程池的使用步骤:
 * 1 使用线程池的工程类java.util.concurrent.Executors 中的静态方法static ExecutorService newFixedThreadPool(int threadNum);方法生产指定
 * 线程数量的线程池
 * 2 创建一个类,实现Runnable接口,重写run方法以便设置线程任务
 * 3 调用ExecutorService接口中的submit方法,传递第二步中的实现类对象,以便开启线程执行线程的任务
 * 4 调用ExecutorService接口中的shutdown方法,销毁线程池,但是不建议销毁线程池
 */
public class Demo01 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(2);
//        设置三个任务
        executorService.submit(new Impl());//pool-1-thread-1创建了新的线程
        executorService.submit(new Impl());//pool-1-thread-2创建了新的线程
        executorService.submit(new Impl());//pool-1-thread-2创建了新的线程
//        上面其实创建了三个任务,线程池中只有2个线程,那么某个线程使用完毕后自动将线程归还给线程池,继续执行新的任务

//        executorService.shutdown();//不建议执行,执行本行代码之后程序也会终止

    }//main

}

 

posted @ 2020-12-15 12:01  guofen3399  阅读(86)  评论(0)    收藏  举报