Java基础教程——线程池

启动新线程,需要和操作系统进行交互,成本比较高。 使用线程池可以提高性能——

线程池会提前创建大量的空闲线程,随时待命执行线程任务。在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务。(这个任务,就是Runnable的run()方法,或Callable的call()方法)。


Java 5之前需要手动实现线程池,Java 5之后直接支持线程池。

  • Java.util.concurrent. Executors:用于创建线程池 |--|--Executors.newFixedThreadPool():创建有固定线程数量的线程池

  • Java.util.concurrent.ExecutorService:尽快执行线程的线程池(有空闲线程就即刻执行)

  • ExecutorService对象的submit()方法用于提交Runnable或Callable对象

  • 不再提交任务是,调用ExecutorService对象的shutdown()方法关闭线程池,线程池不再接受新的任务,但会把之前的任务执行完毕。

    package ahjava.p06thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; // Executors:用于创建线程池 // .newFixedThreadPool():创建有固定线程数量的线程池 // ExecutorService:尽快执行线程的线程池(有空闲线程就即刻执行) public class _51ThreadPoolTest { public static void main(String[] args) throws Exception { // 创建一个具有固定线程数(6)的线程池 ExecutorService pool = Executors.newFixedThreadPool(6); Runnable target = new Runnable() { @Override public void run() { for (int i = 0; i < 100; i++) { String name = Thread.currentThread().getName(); System.out.println(name + ":" + i); } } }; // 向线程池中提交两个线程 pool.submit(target); pool.submit(target); // 关闭线程池 pool.shutdown(); } }

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 面试知识点笔记(十三)多线程与并发

java线程池,利用Exceutors创建不同的线程池满足不同场景需求:1.newSingleThreadExecutor() 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。2.

java_线程池

血一样的教训,今天上午参加了一家现场面试java。在这之前,我一直认为我的java基础还是可以的,而今天一问三不知。现在将面试的问题整理出来一、说说java中的线程池?  1.线程池:线程池是线程的集合,不用自己创建线程,把线程直接给线程池,由线程池处理。   2.过程:首先,使用线程池可以重复利用已有的线程继续执行任务,避免线程在

Executor线程池

线程池为线程生命周期的开销和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。_0_|_1_线程实现方式Thread、Runnable、Callable//实现Runnable接口的类将被Thread执行,表示一个基本任务p

Executor框架

任务是一组逻辑工作单元,而线程则是使任务异步执行的机制。线程池简化了线程的管理工作,并且java.util.concurrent提供了一种灵活的线程池实现作为Executor框架的一部分。在Java类库中,任务执行的主要抽象不是Thread,而是Executor,如下所示:publicinterfaceExecutor{void

ExecutorService 线程池 (转发)

1.ExecutorServicejava.util.concurrent.ExecutorService接口。用来设置线程池并执行多线程任务。它有以下几个方法。Future<?java.util.concurrent.ExecutorService.submit(Runnabletask)提交任务并执行,返回代表这个任务的future