Java创建线程池的几种方式
方式一:继承Thread类
新建一个类并该类声明为Thread
的子类。 这个子类应该重写run
类的方法。例如,计算大于规定值的素数的线程可以写成如下:
class PrimeThread extends Thread {long minPrime;PrimeThread(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}
然后,以下代码将创建一个线程并启动它运行:
PrimeThread p = new PrimeThread(143);
p.start();
其中start方法是Thread父类中的一个方法,该方法的目的就是创建新的线程,Java虚拟机调用此线程的run方法。
方式二:继承Runnable接口,实现run方法;这种其他风格的同一个例子如下所示:
class PrimeRun implements Runnable {long minPrime;PrimeRun(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}
然后,以下代码将创建一个线程并启动它运行:
PrimeRun p = new PrimeRun(143);new Thread(p).start();
其中的start方法与上述无异,都是新创建一个线程并调用run方法。
方式三:继承Callable接口,实现call方法。该新建线程的接口是在JDK1.5之后新推出的;例子如下:
class CallableTest implements Callable {//返回结果并可能引发异常的任务。public V call throws Exception() {...}
}
Callable
接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,Runnable
不返回结果,也不能抛出被检查的异常。
然后,以下代码将创建一个线程并启动它运行:
//创建Callable接口实现类的对象
CallableTest callableTest = new CallableTest();
//将此Callable接口实现类的对象作为传递到FutureTask构造器中,创建FutureTask的对象
FutureTask futureTask = new FutureTask(callableTest);
//将futureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()
new Thread(futureTask).start();
try{//获取Callable中call方法的返回值//get()返回值即为FutureTask构造器参数Callable实现类重写的call()的返回值Objest obj = futureTask.get();
}catch(InterruptedException e){e.printStackTrace();
}catch(ExecutionException e){e.printStackTrace();
}
方式四: 创建线程池方法创建线程。JDK1.5之后,有了线程池相关的API:ExecutorService和Executors
ExecutorService:真正的线程池接口
Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池
//利用Executors的方法newFixedThreadPool,该方法是创建一个可重用n个固定线程数的线程池
ExecutorService service = Executors.newFixedThreadPool(int n);
//execute方法参数只能是继承Runnable接口的实现类
service.execute(Runnable command);
//submit方法可写继承Callable和Runnable接口的实现类,大多数情况下写Callable,因为该方法有返回值与其中的call方法相对应,返回值用FutureTask接收,与方式三相同
service.submit(Callable<T> task);
//创建线程池需要手动关闭
service.shutdown();
Java创建线程池的几种方式相关推荐
- java创建线程池几种方式_java知识总结-创建线程池的6种方式
一.创建线程池的6种方式: Executors.newCachedThreadPool(); 创建一个可缓存线程池,应用中存在的线程数可以无限大 Executors.newFixedThreadPoo ...
- 创建线程池的七种方式
在 Java 语言中,并发编程往往都是通过床架线程池来实现的,而线程池的创建方式也有很多种,每种线程池的创建方式都对应了不同的使用场景.总结来说线程池的创建可以分为两大类: 通过 Executors ...
- 线程池的五种状态及创建线程池的几种方式
上篇<Java线程的6种状态详解及创建线程的4种方式> 前言:我们都知道,线程是稀有资源,系统频繁创建会很大程度上影响服务器的使用效率,如果不加以限制,很容易就会把服务器资源耗尽.所以,我 ...
- 【多线程】创建线程池有几种方式
网上的文章一般会说,创建线程池基本上是2种方式.ThreadPoolExecutor或者Executors.本文就是通过剖析源码,看下它们的实现. ThreadPoolExecutor ThreadP ...
- 从源码分析创建线程池的4种方式
摘要:从创建线程池的源码来深入分析究竟有哪些方式可以创建线程池. 本文分享自华为云社区<[高并发]从源码角度分析创建线程池究竟有哪些方式>,作者:冰 河 . 在Java的高并发领域,线程池 ...
- 创建线程池的四种方式_创建线程到底有几种方式?
很多时候,在项目中使用线程的情况很少,导致很多人只停想起最常见的两种创建线程的方法,即继承Thread类和实现Runnable接口. 而网络上大家有人认为是三种实现方式,也有人认为是四种实现,下面我们 ...
- 线程池介绍及创建线程池的4种方式
1. 什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 第一:降低资源消耗.通过重复利 ...
- java创建线程常用的两种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代 表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的 ...
- Java创建线程池的方式
Java创建线程池的方式 文章目录 Java创建线程池的方式 一.通过Executors工厂方法创建 1.Executors.newSingleThreadExecutor() 2.Executors ...
最新文章
- 别只顾着写代码,学会这 25 条比涨工资都重要,你信不?
- java 虚拟机规范_Java虚拟机规范----Java虚拟机结构
- linux中cut -c命令,linux中~/cut/argus/
- mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表
- 基于谱减法的声音去噪
- c++从txt中读取数据,数据并不是一行路径(实用)
- 大厂2020届实习生笔试题
- Java期末设计(十三周)
- jQuery ajax设置全局配置
- 蒸汽管道图纸符号_管道图形符号
- signature=29c90d1a8d382ff261d00a931708390a,发烧音响功放(顶级Hi-End音响发烧器材介绍)...
- 基于龙芯CPU中标麒麟操作系统的国产半实物仿真系统ETestDEV
- 码农故事1——受惠寄居遇驴友 维艰窘境见人心
- tracert路由跟踪(ICMP)
- 最简单的验证码(利用JSP生成验证码)
- bigbrother的python第一天 复习基础知识
- re模块 正则表达式
- MySQL 数据库去重处理(小白)
- JAVA--java计算时间差,日期差小结
- 前端blob下载文件
热门文章
- 我的世界服务器怎么修改小标题,我的世界修改游戏标题 | 手游网游页游攻略大全...
- 从实际案例看收到337调查签发之排除令后的应对策略
- 面试了十几家公司,我拿到了18.5k的offer
- PHP - 理论篇-1
- 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1=i,j=n,且i=j)在B中的位置为()
- turtle库实例——雪景艺术绘图
- 现代控制工程笔记(一)控制系统的状态空间描述
- 揭秘跑男全部游戏规则及说明
- 论文学习——多度量水文时间序列相似性分析
- 国内外计算机的最科技成果,中国最近的科技发展成就