首页 > 编程语言 >java使用线程池实现多线程

java使用线程池实现多线程

时间:2022-10-25 03:22:05浏览次数:46  
标签:ExecutorService java Executors 创建 void 线程 service1 多线程

package A_ShangGuiGu.Thread.ThreadTest;

import java.util.concurrent.*;

/**
* 创建线程的方式四:使用线程池。
* 线程池的好处:
* 1.提高响应速度(减少了创建线程的时间)
* 2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
* 3.便于线程管理:
* 1)corePoolSize:核心池的大小
* 2)maximumPoolSize:最大线程数
* 3)keepAliveTime:线程没有任务时最多保持多长时间关闭。
*
* 线程池的api:ExecutorService和Executors
* 1.ExecutorService:真正的线程池接口。
* 1)void execute(Runnable command):执行任务/命令。没有返回值,一般用于Runnable接口的线程
* 2)<T>future<T>submit(Callable<T>Task):执行任务,有返回值,一般用于执行Callable接口的线程
* 3)void Shutdown:关闭连接池
* 2.Executors工具类子类:
* 1)Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池。
* 2)Executors.newFixedThreadPool():创建一个可重用固定线程数的线程池。(线程池里线程数量可以自己设置)
* 3)Executors.newSingleThreadExecutor():创建一个只有一个线程的线程池。
* 4)Executors.newScheduledThreadPool():创建一个线程池,他可以安排在给定延迟后运行命令或者定期运行命令。
* 5)
*/
//创建一个线程
class Number01 implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (i%2==0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class Number02 implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (i%2!=0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}

public class ThreadPool {
public static void main(String[] args) {

//1.提供一个指定线程数量的线程池
//这个创建的线程池是使用的ExecutorService接口,里面的属性是常量,能修改的很少。ExecutorService是一个很大的类
ExecutorService service = Executors.newFixedThreadPool(10);

//将ExecutorService类型的对象向下转型(需要强制转型)后,就可以对转型后的线程池修改属性了
ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;

//service1.setKeepAliveTime(5, TimeUnit.SECONDS);


//2.将线程类实例化一个对象
Number01 number01 = new Number01();
Number02 number02 = new Number02();

//3.执行指定的线程对象的操作
service1.execute(number01);
service1.execute(number02);
//4.执行结束后需要关闭
service1.shutdown();
}
}

标签:ExecutorService,java,Executors,创建,void,线程,service1,多线程
From: https://www.cnblogs.com/zhazhawei906/p/16823662.html

相关文章

  • 创建线程的方式三:实现Callable接口
    packageA_ShangGuiGu.Thread.ThreadTest;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTa......
  • How to detect if you are in Incognito mode in Google Chrome with JavaScript
    varfs=window.RequestFileSystem||window.webkitRequestFileSystem;if(!fs){console.log("checkfailed?");}else{fs(window.TEMPO......
  • JavaScript高级程序设计笔记11 期约与异步函数(Promise & Async Function)
    期约与异步函数ES6新增Promise引用类型,支持优雅地定义和组织异步逻辑。ES8增加了使用async和await关键字定义异步函数的机制。异步编程JavaScript这种单线程事件循环模......
  • Java学习资源
    学习网站官网:最权威的学习资源,优先选择。JavaGuide官方网站名称官网地址简单介绍SpringBoothttps://spring.io/projects/spring-boot#learnRocketMQ......
  • 类的编写模板之简单Java类
    简单Java类是初学java时的一个重要的类模型,一般由属性和getter.setter方法组成,该类不涉及复杂的逻辑运算,仅仅是作为数据的储存,同时该类一般都有明确的实物类型。如:定义一个......
  • javascript编程单线程之同步模式
    javascript编程单线程之同步模式主流的js环境都是单线程吗模式执行js代码,js采用为单线程的原因与最开始设计初衷有关,最早是运行在浏览器端的脚本语言,目的是为了实现页......
  • java流程控制1之Scanner
    一、Scanner对象1、基本语法Scannerscanner=newScanner(System.in);2、基本用法规则通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前我们一般......
  • jdbc java database con
    jdbc是一种实现数据库与java之间的接口,mysql等数据都有的jdbc的实现类步骤1.注册驱动:class.forname("com.mysql.jdbc.Driver")2.获取数据库连接:Connection conn=D......
  • JAVA面向对象-下
    Java面向对象-下static1.可以用来修饰的结构:主要用来修饰类的内部结构属性、方法、代码块、内部类2.static修饰属性:静态变量(或类变量)2.1属性:是否使用static修饰,又分......
  • 并发编程之线程池
    线程池为什么需要线程池?如果性能允许的话,我们完全可以在for循环代码起很多的线程去帮我们执行任务,代码如下publicclassManyThread{publicstaticvoidmain(S......