线程生命周期图:

Java eventbus生命周期自动销毁线程 java线程池生命周期_线程池

线程池
线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,然后对这些资源进行复用。减少频繁的创建和销毁对象。
jdk1.5版本以上提供了现成的线程池。
Java里面线程池的顶级接口是Executor,是一个执行线程的工具。
线程池接口是ExecutorService。


java.util.concurrent 包:并发编程中很常用的实用工具类
Executor 接口:
执行已提交的 Runnable 任务的对象。
ExecutorService 接口:
Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
Executors 类:
此包中所定义的Executor、ExecutorService等的工厂和实用方法。


在Executors类里面提供了一些静态工厂,生成一些常用的线程池。
newSingleThreadExecutor:
创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
newFixedThreadPool:
创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。
线程池的大小一旦达到最大值就会保持不变,
如果某个线程因为执行异常而结束,
那么线程池会补充一个新线程。


newCachedThreadPool:
创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
newScheduledThreadPool:
创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。


package com.vince;

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

/**
 * Created by vince on 2017/6/5.
 * JDK1.5线程池
 */
public class ThreadDemo5 {


    public static void main(String[] args) {
        //创建线程池(4种)
        //1创建一个单线程的线程池
//        ExecutorService es = Executors.newSingleThreadExecutor();
        //创建一个固定大小的线程池
//        ExecutorService es = Executors.newFixedThreadPool(1);
        //创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,
        // 那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,
        // 此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,
        // 线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
//        ExecutorService es = Executors.newCachedThreadPool();
        ScheduledExecutorService es = Executors.newScheduledThreadPool(3);

//        es.execute(new MyRunable6());
//        es.execute(new MyRunable6());

        es.schedule(new MyRunable6(),3000, TimeUnit.MILLISECONDS);
        es.shutdown();
    }
}

class MyRunable6 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+"---"+i);
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

第一种方法 创建单线程线程池

Java eventbus生命周期自动销毁线程 java线程池生命周期_java_02


执行完一个 再执行另一个

Java eventbus生命周期自动销毁线程 java线程池生命周期_Java基础_03


第二种 创建一个固定大小的线程池

Java eventbus生命周期自动销毁线程 java线程池生命周期_线程生命周期_04


Java eventbus生命周期自动销毁线程 java线程池生命周期_java_05


第三种 创建一个可缓存的线程池(大小也不限制)

Java eventbus生命周期自动销毁线程 java线程池生命周期_Java基础_06


第四种 创建大小无限制的线程池 需要有一个初始容量

Java eventbus生命周期自动销毁线程 java线程池生命周期_Java基础_07


延迟三秒执行 schedule方法


idea小技巧

Java eventbus生命周期自动销毁线程 java线程池生命周期_线程生命周期_08


.var

就可以直接创建一个这个类的对象 不用自己写了

Java eventbus生命周期自动销毁线程 java线程池生命周期_java_09


如果想创建一个私有属性

Java eventbus生命周期自动销毁线程 java线程池生命周期_java_10


Java eventbus生命周期自动销毁线程 java线程池生命周期_线程生命周期_11


Java eventbus生命周期自动销毁线程 java线程池生命周期_Java基础_12


.filed

Java eventbus生命周期自动销毁线程 java线程池生命周期_Java基础_13


前边博客的目录

1、进程与线程
2、线程的基本使用
3、线程休眠
4、join与中断线程
5、守护线程与yield
6、其它方法与优先级
7、线程同步
8、死锁
9、生产者与消费者应用案例
10、线程生命周期
11、线程池