重生之我学多线程

1.线程

进程与线程

进程:操作系统分配资源的最小单位
线程:任务调度和执行的最小单位
简单理解:线程是进程的子集
线程构成:
进程构成:

进程实现

Runable

一个接口,用于创建线程,主要方法,run()

@FunctionalInterface
public interface Runnable {
	//实现run方法就可以
    public abstract void run();
}

配合Thread使用

Callable

@FunctionalInterface
public interface Callable {
    /**
     * Computes a result, or throws an exception if unable to do so.
     *
     * @return computed result
     * @throws Exception if unable to compute a result
     */
    V call() throws Exception;
}

配合FutureTask使用,这个继承实现Runable和Callable,FutureTask只执行一次
因为public class FutureTask implements RunnableFuture
所以可以放入到Thread统一启动

2.线程池

ThreadPoolExecutor类

参数

public ThreadPoolExecutor(int corePoolSize,  //核心线程数
                              int maximumPoolSize,       //最大线程数=核心线程数+临时线程数
                              long keepAliveTime,          //临时线程存活时间
                              TimeUnit unit,                    //时间粒度
                              BlockingQueue workQueue,   //阻塞队列
                              RejectedExecutionHandler handler)           //拒绝策略

拒绝策略

策略 类名 核心行为
AbortPolicy new AbortPolicy() 直接抛出 RejectedExecutionException 异常,阻止任务提交。
CallerRunsPolicy new CallerRunsPolicy() 由调用 execute() 的线程(主线程或提交任务的线程)直接执行任务。
DiscardPolicy new DiscardPolicy() 静默丢弃无法执行的任务,不抛出异常。
DiscardOldestPolicy new DiscardOldestPolicy() 丢弃队列中最旧的未处理任务,尝试提交当前任务(若线程池未满)。

常见方法

方法名 作用
submit 可以提交Runable/Callable,Callable返回FutureTask类
execute 提交Runable并执行任务
shutdown 关闭线程池

你可能感兴趣的:(java,jvm,开发语言)