启动新线程,需要和操作系统进行交互,成本比较高。

使用线程池可以提高性能——

线程池会提前创建大量的空闲线程,随时待命执行线程任务。在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务。(这个任务,就是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线程池教程_Java基础教程——线程池相关推荐

  1. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  2. java io流 教程_Java基础教程:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:指的是从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列 ...

  3. java多线程教程_java 基础教程之多线程详解及简单实例

    java 多线程详解 在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信. 线程是操作系统运行的基本单位,它 ...

  4. java视频教程千峰_java基础教程-Java开发入门视频教程-千锋教育视频资源库

    第1节 - Java由来及语言特点 点击播放 第2节 - Java的执行机制及第一个应用程序 点击播放 第3节 - 类的阐述及Package相关 点击播放 第4节 - Java的编码规范 点击播放 第 ...

  5. java引入string类_Java基础教程——String类

    String类 Java程序中的所有字符串字面值(如 "abc" )都是String的实例 字符串是常量(因为 String 对象是不可变的,所以可以共享) 字符串的本质是字符数组 ...

  6. java 反射教程_Java基础教程——反射机制

    Java反射机制 Java反射机制是Java语言的一个重要特性,使得Java语言具备"动态性": 在运行时获取任意一个对象所属的类的相关信息; 在运行时构造任意一个类的对象: 在运 ...

  7. java substring截取字符串_java基础教程之字符串的介绍,比较重要的一个知识点【下】...

    字符串操作 1.获取子字符串 通过String类的substring()方法可对字符串进行截取.这些方法的共同点就是都是利用字符串的下标进行截取.应明确字符串下标是从0开始的. substring() ...

  8. java jdk使用教程_Java基础教程——安装JDK

    使用[jdk-8u144-windows-x64.exe] 下载地址: 安装后测试:打开cmd,输入[java -version] C:\Users\Administrator>java -ve ...

  9. java 缓存教程_Java基础教程——缓冲流

    缓冲流 "缓冲流"也叫"包装流",是对基本输入输出流的增强: 字节缓冲流: BufferedInputStream , BufferedOutputStream ...

最新文章

  1. windows10 自动开机、关机
  2. oracle何时使用to_date函数
  3. java 枚举 被继承_enum不能被继承
  4. May 18:PHP 用到的学习工具
  5. java 编辑我的世界_Editing Java版1.13 (section)
  6. Linux文件atime ctime mtime
  7. Jena Fuseki安装完成后不能添加数据库
  8. 正则表达式 (grep)
  9. 电控无碳小车需要单片机吗_电控无碳小车的设计及研究
  10. iOS多线程系列之GCD栅栏(barrier)实现同步锁
  11. BZOJ2300[HAOI2011] 防线修建
  12. 如何更改 Windows XP 中的 Windows 登录屏幕保护程序
  13. 入门JSP第一步,看这里~
  14. oracle经典50题及答案,Oracle经典练习题及标准答案
  15. P8195 [传智杯 #4 决赛] 小智的疑惑 —KMP
  16. winform pdf转图片.jpg或.png(O2S.Components.PDFRender4NET)
  17. turtlepen画出小黄人
  18. QQ(微信)一次性发送多条信息(连续发520遍我爱你)
  19. 9.什么是向上转型?什么是向下转型?
  20. java需要打开开机启动项吗_开机启动项

热门文章

  1. c语言编程题解题思路,简单思路清晰的C语言解题过程
  2. lunix命令向文件添加内容的几种方法
  3. 推荐两款剪切板增强工具,Ditto与CopyQ
  4. 浅谈parseFloat(parseInt)与Number
  5. 写于莫言获得诺贝尔文学奖之际
  6. oracle查看编码格式以及修改字符集编码
  7. 视图类中CMyDoc* GetDocument() const编译时错误:缺少“;”(在“*”的前面)
  8. BugFree邮件设置
  9. gh-ost的使用和添加索引
  10. 金三银四什么样的面试更有效?