0

0

Java多线程的创建方式有哪些?

PHPz

PHPz

发布时间:2023-04-26 16:07:19

|

2712人浏览过

|

来源于亿速云

转载

java创建多线程的方法有哪些

Java创建多线程的五种方法

(一)继承Thread类

1.实现描述

  • 通过继承Thread并且重写其run( ),run方法中定义需要执行的任务。创建后的子类通过调用start( )方法即可执行线程方法。

  • 通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量。需要创建不同Thread对象,自然不共享资源。

2.具体步骤

1)定义UserThread类,继承Thread类
2)重写run( )方法
3)创建UserThread对象
4)调用start( )方法

3.代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

立即学习Java免费学习笔记(深入)”;

4.注意事项

  • 数据资源不共享,多个线程分别完成自己的任务。比如三个售票窗口同时售票,各自卖各自的票,会出现三个售票窗口出售同一张票的问题。

(二)实现Runnable接口

1.实现描述

  • 需要先定义一个类实现Runnable接口并重写该接口的run( )方法,此run方法是线程执行体。接着创建 Runnable实现类的对象,作为创建Thread对象的参数target,此Thread对象才是真正的线程对象。

  • 利用实现Runnable接口的线程类创建对象,可以实现线程之间的资源共享。

2.具体步骤

1)定义一个UserRun类,实现Runnble接口
2)重写run( )方法
3)创建UserRun类的对象
4)创建Thread类的对象,UserRun类的对象作为Thread类构造方法的参数
5)启动线程

3.代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

4.注意事项

  • 数据资源共享,多个线程共同完成一个任务(多个线程共享了创建线程对象的资源)。比如三个售票窗口(三个线程)同时售票(MyThread类中的ticket),三个线程共同使用资源。

(三)实现Callable接口

1.实现描述

  • Callable接口如同Runable接口的升级版,其提供的call( )方法将作为线程的执行体,同时允许有返回值。

  • Callable对象不能直接作为Thread对象的target,因为Callable接口是 Java5 新增的接口,不是Runnable接口的子接口。

  • 对于这个问题的解决方案,就引入 Future接口,此接口可以接受call( )的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作为Thread对象的target。

2.具体步骤

1)定义类UserCallable,实现Callable接口
2)重写call( )方法
3)创建UserCallable的对象
4)创建RunnableFuture接口的子类FutureTask的对象,构造函数的参数是UserCallable的对象
5)创建Thread类的对象,构造函数的参数是FutureTask的对象
6)启动线程

3.代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

4.注意事项

  • 数据资源共享,多个线程共同完成一个任务(多个线程共享了创建线程对象的资源)。比如三个售票窗口(三个线程)同时售票(MyThread类中的ticket),三个线程共同使用资源。同时,线程调用完毕后还会带有返回值

(四)继承TimerTask类

1.实现描述

  • 定时器类Timer和TimerTask可以做为实现线程的另一种方式。

  • Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。

  • TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

2.具体步骤

1)定义类UserTimerTask,继承抽象类TimerTask
2)创建UserTask类的对象
3)创建Timer类的对象,设置任务的执行策略

3.代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

千博购物系统.Net
千博购物系统.Net

千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使

下载

Java创建多线程的方法有哪些

4.注意事项

  • 定时器类创建线程更多的是用于定时任务的处理,并且各线程间数据资源不共享,多个线程分别完成自己的任务。

(五)通过线程池启动多线程

1.实现描述

  • 通过Executors 的工具类可以创建线程池。

  • 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行。

  • 降低系统资源消耗,通过重用已存在的线程降低线程创建和销毁造成消耗。

  • 方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并目会造成CPU过度切换。

2.实现方法

1) FixThreadPool(int n)固定大小的线程池
(1)具体步骤

① 通过Executors.newFixedThreadPool(5)创建固定大小的线程池
② 重写Runnable类的run( )方法,并使用线程池执行任务
③ Shutdown( )关闭线程池

(2)代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

(3)注意事项
  • 创建固定大小的线程池,可实现数据资源共享,多个线程共同完成一个任务。

2)SingleThreadExecutor( )单线程池
(1)具体步骤

① 通过Executors.newSingleThreadExecutor( )创建单线程池
② 重写Runnable类的run( )方法,并使用线程池执行任务
③ Shutdown( )关闭线程池

(2)代码实现

Java创建多线程的方法有哪些

(3)注意事项
  • 线程池仅创建一个线程执行任务。

3)CachedThreadPool( )缓存线程池
(1)具体步骤

① 通过Executors.newCachedThreadPool( )创建尽可能多的线程池
② 重写Runnable类的run( )方法,并使用线程池执行任务
③ Shutdown( )关闭线程池

(2)代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

(3)注意事项
  • 该方法会创建尽可能多的线程来完成任务,如案例中虽然只有10张票,但线程池却生成了至少12个线程。

4)ScheduledThreadPool(int n)定时周期性线程池
(1)具体步骤

① 通过Executors.newScheduledThreadPool(5)创建固定核心线程数(最小维护的线程数,线程创建后不会被回收)的线程池,线程按计划定期执行。
② 重写Runnable类的run( )方法,并使用线程池执行任务
③ Shutdown( )关闭线程池

(2)代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

(3)注意事项
  • 创建一个周期性的线程池,支持定时及周期性执行任务(第一个时间参数是执行延迟时间,第二个参数是执行间隔时间)。

5)WorkStealingPool( )新线程池类ForkJoinPool的扩展
(1)具体步骤

① 通过Executors.newWorkStealingPool( )创建线程池
② 重写Runnable类的run( )方法,通过Thread类的对象调用Runnable类的对象,使用线程池执行任务
③ Sleep( )让主线程等待子线程执行完毕,也可以使用计数器的方式
④ Shutdown( )关闭线程池

(2)代码实现

Java创建多线程的方法有哪些
Java创建多线程的方法有哪些

(3)注意事项
  • 因为每一个线程都有一个自己的任务队列,因为任务有多有少,可能造成CPU负载不均衡。通过本方法可以有效利用多核CPU优势,少任务的线程可以通过“窃取”任务较多的线程的任务,从而均衡各CPU任务的执行情况。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

801

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

727

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

395

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

445

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

428

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16860

2023.08.03

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.1万人学习

C# 教程
C# 教程

共94课时 | 5.6万人学习

Java 教程
Java 教程

共578课时 | 39.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号