首页 > 编程语言 >java-多线程(一)

java-多线程(一)

时间:2025-01-10 22:57:34浏览次数:3  
标签:java Thread 接口 Callable 线程 多线程 public

线程

线程是操作体统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

并发和并行

并发:在同一时刻,有多个指令在单个CPU上交替执行。

并行:在同一时刻,有多个指令在多个cpu上同时执行。

多线程的实现方式

  • 继承Thread类的方式进行实现。
多线程的第一种启动方式:
1.自己定义一个继承Thread。
2.重写run方法。
3.创建子类的对象,并启动线程。
public class MyThread extends Thread{
public void run(){
for(int i = 0;i < 100 ;i++){
System.out.println(getName()+"HelloWorld");
}
}
//
public class ThreadDemo{
public static void main(String[] args){
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();
}

  • 实现Runnable接口的方式进行实现。
public class MyRun implements Runnable{
for(int i=0;i<100;i++){

Thread t = Thread.currentThread();
System.out.println(t.getName()+"Hello world");
}

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

// 多线程的第二种启动方式
1.自己定义一个类实现Runable接口
2.重写里面的run方法
3.创建自己的类的对象
4.创建一个Thread类的对象,并开启线程
**/
MyRun mr = new MyRun();
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();

}
}
  • 利用Callable接口和Future接口的方式实现。
特点:可以获取到多线程运行的结果
1.创建一个类MyCallable实现Callable接口

2.重写call(是有返回值的,表示多线程运行的结果)
3.创建MyCallable的对象(表示多线程要执行的任务)
4.创建FutureTask的对象(作用管理多线程的运行结果)
5.创建Thread类的对象,并启动(表示线程)
// 创建 Callable 的对象(表示多线程要执行的任务)
MyCallable mc = new MyCallable();
// 创建FutureTask的对象
FutureTask<integer> ft = new FutureTask<>(mc);
// 创建线程的对象
Thread t1 = new Thread(ft);
// 启动线程
t1.start();
// 获取结果
int result = ft.get();
sout(result);// System...//


public class MyCallable implements Callable<Integer>{
public Integer call() throws Exception{
int sum = 0;
for(int i = 1;i<=100;i++){
sum = sum +i;}
return sum;
}
}

优缺点 :

优点缺点
继承Thread类编程比较简单,可以直接使用Thread类中的方法可以扩展性较差,不能在继承其他的类
实现Runnable接口        扩张性强,实现该接口的同时还可以继承其他的类编程相对复杂,不能直接使用Thread类中的方法
实现Callable接口扩张性强,实现该接口的同时还可以继承其他的类编程相对复杂,不能直接使用Thread类中的方法

标签:java,Thread,接口,Callable,线程,多线程,public
From: https://blog.csdn.net/m0_73863802/article/details/145065080

相关文章

  • 01 Java入门
    1972年C诞生贴近硬件、运行极快、效率较高操作系统、编译器、数据库、网络系统等指针和内存管理1982年C++诞生面向对象兼容C图形领域、游戏等1995年Java诞生简单性面向对象可移植性高性能分布式动态性多线程安全性健壮性Java三大版本JavaSE:标准版(桌......
  • 高级语言(Java\Python\Php)的编译:链接及装载过程介绍10
    引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言(Python,Php)作为实现功能的首选,而不会选择开发效率低,而运行效率高的C/C++作为开发语言。而这些语言一般情况下是运行在虚......
  • 高级语言(Java\Python\Php)的编译:链接及装载过程介绍2
    引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言(Python,Php)作为实现功能的首选,而不会选择开发效率低,而运行效率高的C/C++作为开发语言。而这些语言一般情况下是运行在虚......
  • JavaScript 交互逻辑与异步编程
    JavaScript作为前端实现交互逻辑的核心语言,其复杂性和重要性不言而喻。在构建诸如表单验证、菜单展开收起、页面动态加载等交互功能时,我常常需要处理各种事件监听、DOM操作以及数据的动态更新。尤其是当涉及到异步操作,比如从后端接口获取数据并实时更新页面内容时,JavaScript的......
  • Java实现任务管理器性能网络监控数据
    在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用、磁盘I/O以及网络流量等。对于开发者和系统管理员来说,了解这些性能数据有助于优化应用程序和系统性能。本文将介绍如何使用Java编写一个简单的程序来监控网络性能数据,并展......
  • (免费送源码)计算机毕业设计原创定制:Java+ssm+MySQL SSM 超市外卖系统小程序
     摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市外卖系统小程序被用户普遍使用,为方便用户能够可以随时进行超市外卖系统小程序的数据信息管理,特开发了基于微信小程......
  • (免费送源码)计算机毕业设计原创定制:Java+ssm+MySQL SSM母婴用品交流系统
     摘  要随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。母婴用品交流系统,主要的模块包括查看首页、轮播图管理、通知公告管理、资源管理(母婴资讯、资讯分类)、交流管理(交流论坛、论坛分类)、用户管理(管理员、普......
  • JAVA-Day 12:数组的动态初始化和遍历
    数组的动态初始化和遍历数组的动态初始化格式为:inta[]=newint[10];a[0]=4;a[1]=5;例:for(inti=0;i<2;i++){System.out.println(a[i]);}代码运行结果如下雨所示:![数组的动态初始化运行结果](file://C:\Users\小王同......
  • JavaScript ES2023/2024 新特性学习总结
    JavaScriptES2023/2024新特性学习总结ES2023/2024规范新特性与最佳实践总结作者:在人间耕耘更新时间:2025年1月10日目录前言核心特性概览ES2023新特性实战ES2024新特性实战实际开发应用场景性能与最佳实践总结前言ES2023/2024规范引入多项新特性,本文......
  • JAVA-Day 11:数组的静态初始化和遍历
    数组的静态初始化和遍历数组静态初始化格式数组的静态初始化与遍历完整格式:数据类型[]数组名=new数据类型[]{元素1,元素2,元素3,....}简化格式:数据类型[]数组名={元素1,元素2,元素3,....}[]在数组名前后都可以代码如下:intnumber[]={1,2,3,4,5};for(inti=0;......