Java中的多线程——通过示例学习
已发表: 2022-06-23Java 是一种支持多线程程序的编程语言。 多线程程序容纳两个或多个同时运行的部分(线程),处理不同的任务,实现最佳的 CPU 使用率。 多线程是多任务的扩展。 多任务可以定义为多个进程共享一个公共处理资源(如中央处理单元)的特性。
多线程将多任务的概念扩展到各种应用程序,在这些应用程序中,定义的操作可以分解为更小的单个线程。
这些线程中的每一个都以不同的执行路径同时且独立地运行,这样一个线程中的异常不会影响其他线程的性能。
从世界顶级大学在线学习软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
Java中的多线程是什么?
Java中的多线程是同时执行多个线程以最大化CPU时间的地方。
线程的生命周期
线程在其生命周期中有不同的阶段。 它们如下:
- 新:线程作为新线程开始其生命周期。 它一直处于这个新生阶段,直到程序运行该线程。
- 可运行:当程序启动时,天生线程进入可运行阶段。 线程在这个阶段开始执行它的任务。
- 等待:这是一个线程等待另一个线程完成其任务的过渡阶段。 处于等待阶段的线程在收到其他线程的信号后切换到可运行阶段。
- 定时等待:这是一个可运行线程可以进入特定时间间隔的阶段。 此阶段中的线程在特定时间间隔结束时移回可运行阶段。
- Dead:这是线程生命周期的最后阶段。 线程在完成其任务后进入此阶段。
Java中多线程的好处
- 由于Java中的线程是独立的,Java多线程不会阻塞用户,它们可以同时执行许多操作。
- 由于 Java 中的多线程支持多个操作,因此它既省时又高效。
- 程序即使有一部分被截获也可以继续运行。
- 与使用多个进程的传统并行程序相比,它提高了性能。
- 创建可充分利用 CPU 时间的高效程序。
- 大大提高了复杂应用程序的响应时间。
- 与传统的并行程序相比,需要更少的资源。
线程优先顺序
操作系统根据线程的优先级确定线程的执行计划。 线程的优先级是根据其常量的值确定的。
- 常量 1 获得最低优先级 (MIN_PRIORITY)
- 常量 5 获得正常优先级 (NORM_PRIORITY)
- 常数 10 获得最大优先级 (MAX_PRIORITY)
软件工程的热门课程和文章
热门节目 | |||
软件开发执行 PG 计划 - IIIT B | 区块链证书课程 - PURDUE | 网络安全证书计划 - PURDUE | 计算机科学理学硕士 - IIIT B |
其他热门文章 | |||
2021-22年美国云工程师薪水 | 美国 AWS 解决方案架构师薪水 | 美国后端开发人员工资 | 美国前端开发人员薪水 |
美国网络开发人员的薪水 | 2022 年 Scrum Master 面试问题 | 如何在 2022 年开始网络安全职业? | 工程专业学生在美国的职业选择 |
如何在 Java 中创建线程?
在 Java 中可以通过两种方式创建线程:
- 扩展线程类
- 实现一个可运行的接口
通过扩展线程类创建线程
下面给出线程类的一些方法及其功能。
- getName() :用于获取线程的名称
- getPriority():获取线程的优先级
- is Alive():查找线程是否正在运行
- join():等待线程终止
- run() : 线程入口点
- sleep():用于将线程挂起特定时间窗口。
- start() :通过其 run() 方法激活线程。
第 1 步:覆盖线程类中给出的 run() 方法。 这作为线程的入口点,整个程序逻辑应该封装在 4this 中。
run() 方法的语法如下:
公共无效运行()
第二步:通过start()方法启动线程对象,语法为void start() 。
以下是 Java 中的多线程程序示例:
示例 1:
类 MultithreadingDemo 扩展 Thread{
公共无效运行(){
System.out.println(“我的线程正在运行。”);
}
公共静态无效主要(字符串参数[]){
MultithreadingDemo obj=new MultithreadingDemo();
obj.start();
}
}
上述程序的输出将是:
我的线程正在运行。
示例 2:
类计数扩展线程
{
数数()
{
super(“我的线程正在扩展”);
System.out.println(“我的线程已创建” + this);
开始();
}
公共无效运行()
{
尝试
{
对于 (int i=0 ;i<10;i++)
{
System.out.println(“打印计数” + i);
线程.sleep(1000);
}
}
捕捉(中断异常 e)
{
System.out.println(“我的线程被中断了”);
}
System.out.println(“我的线程结束了”);
}
}
类扩展示例
{
公共静态无效主(字符串参数 [])
{
计数cnt =新计数();
尝试
{
而(cnt.isAlive())
{
System.out.println(“主线程将一直存活到子线程存活”);
线程.sleep(1500);
}
}
捕捉(中断异常 e)
{
System.out.println(“主线程被中断”);
}
System.out.println(“主线程运行终止”);
}
}
上述程序的输出将是
我的线程是 createdThread[my runnable thread,5,main]
主线程将一直存在,直到子线程存在
打印计数 0
打印计数 1
主线程将一直存在,直到子线程存在
打印计数 2
主线程将一直存在,直到子线程存在
打印计数 3
打印计数 4
主线程将一直存在,直到子线程存在
打印计数 5
主线程将一直存在,直到子线程存在
打印计数 6
打印计数 7
主线程将一直存在,直到子线程存在
打印计数 8
主线程将一直存在,直到子线程存在
打印计数 9
我的线程运行已终止
主线程运行终止
通过实现可运行接口创建线程
使用此方法时需要遵循三个重要步骤。
第 1 步:run() 方法应由可运行接口实现。 这个 run() 方法作为线程的入口点,应该包含整个程序逻辑。
run() 方法的语法是
公共无效运行()
第 2 步:应使用下面给出的构造函数激活线程对象。
线程(可运行线程对象,字符串线程名称);
这里threadObj作为实现runnable接口的类,thread name是给新线程的名字。
第三步:创建线程对象后,可以通过执行run()方法的start()方法来发起。
start() 方法的语法如下。
无效开始();
可以在此处找到通过实现可运行接口来创建线程的示例。
要了解有关 Java 多线程和软件开发的更多信息,我们建议注册IIIT Bangalore 与 upGrad 联合提供的软件开发高级研究生课程。
软件开发执行 PG 计划是一个为期 13 个月的在线计划,旨在帮助在职专业人士通过与行业相关的案例研究和项目在他们的职业生涯中实现巨大飞跃。 该计划还包括十多场来自行业专家的现场会议,以帮助候选人更好地学习。
该计划包括行业项目,以帮助候选人获得实践经验和足够的行业接触,以使他们的学习具有相关性和实用性。 该计划的完成将奖励具有梦寐以求的 IIIT B 认证和校友身份的候选人。
该计划提供来自 upGrad 的 360 度安置支持,影响了来自世界各地的 40,000 多名付费学习者,使事情变得更好。 upGrad 拥有来自超过 85 个国家/地区的学习者基础,为候选人提供了建立全球同行网络的宝贵机会。
Java中的多任务和多线程有什么区别?
多任务是可以同时执行许多任务的过程,多线程是同时执行多个线程的过程,每个线程执行不同的任务。
Java是否支持多重继承?
Java 编程语言支持多重继承,即一个类实现多个接口的过程。 一个类在接口中可以有不同的方法实现(默认或静态)。 与 C++ 语言不同,Java 中的多重继承只能使用接口而不是类来实现。
多线程可以提高Java的性能吗?
多线程通过允许多个 CPU 处理同一个问题来提高 Java 的性能。 这不仅加快了流程,还有助于有效地解决问题。