线程的复习

news2024/9/21 3:00:39

目录

  • 大纲
      • Java中的线程概念
      • 创建线程的方法
      • 线程的生命周期
      • 线程的同步和通信
      • 线程的优先级和调度
      • 线程的中断
    • 案例

大纲

在这里插入图片描述

Java中的线程概念

在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作的部分。一个Java程序至少包含一个主线程,即程序开始执行时创建的第一个线程。Java的多线程特性允许一个单独的程序同时执行多个任务,从而提高程序的执行效率和响应能力。

创建线程的方法

Java提供了多种创建线程的方法:

  1. 实现Runnable接口:通过创建一个实现了Runnable接口的类,并重写其run()方法,可以定义线程的执行逻辑。然后,可以使用new Thread(Runnable target)构造函数创建一个Thread对象,并通过调用该对象的start()方法来启动线程。

  2. 继承Thread:通过直接继承Thread类并重写其run()方法,也可以定义线程的执行逻辑。这种方式允许访问Thread类的所有方法,但由于Java不支持多重继承,如果需要继承其他类,这种方式不适用。

  3. 使用CallableFutureCallable接口类似于Runnable,但其call()方法可以返回值,并且可以抛出异常。Future对象可以用来接收Callable任务的返回值。

线程的生命周期

Java线程的生命周期包括以下几个状态:

  • 新建状态(New):使用new关键字创建Thread对象后,线程处于新建状态。

  • 就绪状态(Runnable):调用线程的start()方法后,线程进入就绪状态,等待调度器分配CPU时间。

  • 运行状态(Running):线程获得CPU时间并执行run()方法中的代码。

  • 阻塞状态(Blocked):线程因为等待监视器锁、调用sleep()方法或join()方法等原因而暂时停止执行。

  • 等待状态(Waiting):线程等待某个条件变为真,或者等待其他线程通知。

  • 超时等待状态(Timed Waiting):线程等待某个条件变为真,但等待时间有限制。

  • 终止状态(Terminated):线程执行完毕或因异常退出run()方法后,线程结束其生命周期。

线程的同步和通信

Java提供了多种同步机制来控制多个线程对共享资源的访问,以防止数据不一致和竞态条件。这些机制包括synchronized关键字、ReentrantLockSemaphore等。此外,Java还提供了wait(), notify(), notifyAll()等方法来实现线程之间的通信。

线程的优先级和调度

Java线程具有优先级属性,可以通过setPriority()方法设置。线程调度器根据线程的优先级来决定哪些线程应该获得更多的CPU时间。然而,线程优先级并不保证线程的执行顺序,因为最终的调度决策取决于操作系统的线程调度策略。

线程的中断

Java提供了中断机制,通过调用Thread.interrupt()方法可以设置线程的中断状态。被中断的线程可以在适当的时机响应中断,例如通过检查Thread.interrupted()方法的返回值。

以上信息综合了最新的搜索结果,以确保提供的是时效性内容。

案例

题目选自牛客网
1.有关线程的叙述正确的是()
A.可以获得对任何对象的互斥锁定。
B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。
C.线程通过使用synchronized关键字可获得对象的互斥锁定。
D.线程的创建只能通过继承Thread类来实现。
正确答案:C

正确答案是 C

C. 线程通过使用synchronized关键字可获得对象的互斥锁定。 这是正确的。在Java中,synchronized关键字可以用来同步线程对共享资源的访问,以确保在同一时刻只有一个线程可以执行特定代码段。这可以用来获得对象的互斥锁定。

其他选项的解释:

A. 可以获得对任何对象的互斥锁定。 这个说法是部分正确的,但表述不够准确。实际上,通过synchronized关键字或者显式锁(如ReentrantLock),线程确实可以获得对任何对象的互斥锁定。

B. 通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。 这个说法是错误的。继承Thread类或实现Runnable接口是Java中创建线程的两种方式,但这与获得方法的互斥锁定没有直接关系。互斥锁定是通过synchronized关键字或锁机制实现的。

D. 线程的创建只能通过继承Thread类来实现。 这个说法是错误的。Java中创建线程有两种主要方式:继承Thread类和实现Runnable接口。此外,还可以实现Callable接口,并通过FutureTask包装器来创建线程。还可以使用java.util.concurrent包中的其他类,如ExecutorService

因此,正确答案是C。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python单测框架之pytest常见用法

单测框架的作用 测试发现:从多个文件中寻找测试用例。测试执行:按照一定顺序去执行并且生成结果。测试断言:判断最终结果与实际结果的差异。测试报告:统计测试进度、耗时、通过率,生成测试报告。 pytest简介 pytest是…

51单片机10(蜂鸣器介绍)

一、蜂鸣器介绍: 1、蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于电子产品中作为发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器。 (1)压电式蜂鸣器,它主要由多谐的一个增胀器…

Cyber Weekly #15

赛博新闻 1、OpenAI 绝密项目「草莓」首次曝光 据外媒路透社报道,OpenAI 内部正在一个代号为「草莓(Strawberry)」的项目中开发一种新的人工智能模型。该模型细节此前从未被报道过,而 OpenAI 正在努力证明该模型类型能够提供高级…

C++客户端Qt开发——信号和槽

三、信号和槽 1.信号和槽概述 在Qt中,用户和控件的每次交互过程称为一个事件。比如"用户点击按钮”是一个事件,"用户关闭窗口”也是一个事件。每个事件都会发出一个信号,例如用户点击按钮会发出"按钮被点击"的信号&…

ensp防火墙智能选举综合实验

实验要求: 实验图: 新增配置: 路由isp: 7: 保留ip操作: 一、DX区域: 1、源地址池配置: 2、nat策略: nat安全策略配置: 二、YD: 1、源地址池配置&#xf…

最值得推荐的10款Windows软件!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频播放量破百万https://aitools.jurilu.com/1.音乐播放器——Dopamine Dopamine是一款音乐播放器,设计简洁美观。它支持多种音频格式,包括wav、mp3、ogg…

平衡树——AcWing 253. 普通平衡树

平衡树 定义 平衡树是一种自平衡的二叉搜索树,它在进行插入和删除操作后能够自动调整其结构,以保持树的高度尽可能低,从而保证树的查找、插入和删除操作能够在对数时间内完成。最著名的平衡树有AVL树和红黑树。 AVL树:是一种严格…

10月23-25日|2024年武汉袋式除尘展重磅来袭

2024第六届(武汉)国际袋式除尘技术与设备展览会 时间:2024年10月23-25日 地点:武汉国际文化博览中心 展会介绍: 2024第6届(武汉)国际袋式除尘技术与设备展览会将于2024年10月23-25日在武汉文…

Linux进程理解

一、进程的理解 首先我们知道我们的操作其实都是在运行程序,不仅是在windows上打开软件还是在Linux上执行指令,而程序存在于磁盘上,程序的要想运行就要把程序的代码和数据从磁盘加载到内存,那么到这一步是创建了一个进程吗&#…

c#中的特性

在C#中,特性(Attributes)是一种向程序元素(如类、方法、属性等)添加元数据的方式。特性可以用来提供关于程序元素的附加信息,这些信息可以在编译时和运行时被访问。 特性主要有以下几个用途: 提…

北京交通大学《深度学习》专业课,实验2-前馈神经网络

1. 源代码 见资源“北京交通大学《深度学习》专业课,实验2-前馈神经网络” 2. 实验内容 (1)手动实现前馈神经网络解决上述回归、二分类、多分类任务 分析实验结果并绘制训练集和测试集的loss曲线 (2)利用to…

GUI界面开发之tkinter(一)

Tkinter是一个内置的Python库,用于创建图形用户界面(GUI)。它提供了一组工具和小部件,用于创建窗口、对话框、按钮、菜单和其他GUI元素。 在本篇文章中,主要介绍了窗口等知识点。 大家好!我是码银&#x1…

STM32MP135裸机编程:烧录程序到EMMC的方法

0 前言 STM32MP135支持多种启动方式,包括SD卡、NAND Flash、EMMC等,基于STM32MP135裸机的SD卡烧录操作方法我们之前已经介绍过,现在介绍的STM32MP135烧录到EMMC的方法又和前面烧录到SD卡的操作有所不同。本文将介绍基于STM32MP135&#xff0…

缓存的击穿及解决方案

定义及图解 缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时 候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把…

Flutter 调用Google内购支付最新教程

前言: 各位同学大家好, 之前看到有人在群里问flutter 怎么调用Google支付, 今天就准备整理写一篇文章。 效果图 实现方式: 我们是通过flutter和安卓交互 然后在原生安卓里面加入了内购支付结算库的依赖 最后调起的Google 支付 安卓原生内购支付教程 flutter 端代码 我…

Go: IM系统开发及注意事项

概述 使用Go语言打造支持,同时十万人在线的IM系统系统单机支持十万人,如果分布式部署后,支持数百万都是可以的IM 系统, 即时通讯(Instant Messaging),比如说我们的微信,QQ 等IM 系统,它具备非常…

软件测试服务公司分享:系统测试和验收测试有什么联系和区别?

软件系统测试是指对软件系统的各个模块、组件以及整个系统进行全面检查和验证的过程。它旨在检测系统的功能是否符合需求、是否能够正常运行以及是否存在潜在的问题。在软件开发的整个生命周期中,系统测试是一个非常重要且必不可少的环节。 软件验收测试是软件在开…

vs code 启动react项目,执行npm start报错原因分析

1.执行 npm start错误信息:npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 npm start ~~~ CategoryInfo …

记录些Spring+题集(1)

接口防刷机制 接口被刷指的是同一接口被频繁调用,可能是由于以下原因导致: 恶意攻击:攻击者利用自动化脚本或工具对接口进行大量请求,以消耗系统资源、拖慢系统响应速度或达到其他恶意目的。误操作或程序错误:某些情…

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛:【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集,这是一…