Java知识巩固(四)

news/2024/10/24 2:45:23/

目录

线程的生命周期

一、新建状态(New)

二、就绪状态(Runnable)

三、运行状态(Running)

四、阻塞状态(Blocked)

五、死亡状态(Dead)

什么是双亲委派

continue、break和return的区别是什么?


线程的生命周期

一、新建状态(New)

  • 当程序使用new关键字或其他线程创建方法(如Win32的API或.NET框架的API)创建了一个线程对象后,该线程就处于新建状态。此时,线程对象已经分配了必要的内存空间并初始化了成员变量,但它还没有开始执行,即没有表现出任何动态特征。
  • 在这个阶段,线程的执行体(通常是run方法)还没有被启动,线程对象仅仅是一个普通的Java对象(或其他编程语言的相应对象)。

二、就绪状态(Runnable)

  • 当调用线程的start方法后,线程就进入了就绪状态。此时,线程已经做好了执行准备,表示可以运行了,但还不是正在运行的线程。
  • 就绪状态的线程已经分配了线程ID和线程上下文(包括特定于CPU的寄存器信息等),并且已经创建和初始化了用户态栈和内核态栈。
  • 在这个阶段,线程还没有获得CPU的调度权,因此不会立即执行。线程需要等待JVM(Java虚拟机)中的线程调度器将其调度到运行状态。

三、运行状态(Running)

  • 当就绪状态的线程获得JVM中线程调度器的调度时,线程就进入了运行状态。此时,线程开始执行其执行体(run方法)中的代码。
  • 线程在运行过程中可能会因为时间片用完、主动让出CPU资源(如调用yield方法)或其他原因(如等待I/O操作完成、等待同步锁等)而进入阻塞状态或就绪状态。
  • 在多CPU的机器上,可能会有多个线程同时处于运行状态;但在单CPU的机器上,任何时刻只有一条线程处于运行状态。

四、阻塞状态(Blocked)

  • 线程在运行过程中可能会因为各种原因而进入阻塞状态。阻塞状态是线程暂时停止执行并等待某个条件满足的状态。
  • 线程阻塞的原因可能包括:调用sleep方法主动放弃CPU资源、等待I/O操作完成、等待同步锁(如试图获取一个已被其他线程持有的同步监视器)等。
  • 被阻塞的线程会在合适的时候(如阻塞条件解除后)重新进入就绪状态,并等待线程调度器再次调度它执行。

五、死亡状态(Dead)

  • 当线程的run方法执行完成或线程抛出未捕获的异常时,线程就会进入死亡状态。此时,线程已经完成了其生命周期并终止执行。
  • 线程死亡后,其占用的资源(如用户态栈、内核态栈等)将被释放。同时,线程的引用计数将减1,当引用计数变为0时,线程内核对象将被销毁。

综上所述,线程的生命周期包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。这些状态之间的转换通常是由线程的调度、执行和阻塞等操作引起的。了解线程的生命周期有助于更好地理解线程的并发执行机制和资源管理策略。

什么是双亲委派

双亲委派模式是指Java虚拟机在加载类时采用的一种加载策略。具体来说,当一个类加载器收到类加载的请求时,它并不会自己先去加载该类,而是将这个请求委托给父类的加载器去执行。这个过程会一直递归进行,直到达到顶层的引导类加载器(Bootstrap ClassLoader)。如果父类加载器能够完成类加载任务,就成功返回;如果父类加载器无法完成类加载任务,子加载器才会尝试自己去加载。

双亲委派模式的主要目的是:

  1. 避免重复加载:通过双亲委派模式,可以确保同一个类只被加载一次,从而避免重复加载导致的资源浪费和潜在的问题。
  2. 保护核心类库:双亲委派模式还可以防止恶意代码通过自定义类加载器来篡改Java的核心类库。

例如,在加载jdbc.jar用于实现数据库连接的时候,因为jdbc.jar是基于Java中rt.jar中的SPI接口进行实现的,所以在加载的时候,由于SPI接口会调用实现类中的方法,所以这里jdbc.jar中的方法会被加载到内存中,此时就会进行双亲委派进行类加载。最终从Bootstrap ClassLoader类加载器中加载SPI核心类,然后加载SPI接口的实现类,此时Bootstrap ClassLoader会进行反向委派,通过线程上下文类加载器进行jdbc.jar的加载,从而避免类的重复加载并保护程序安全。

因此,“双清委派”并非一个标准的计算机科学或Java领域的术语,而“双亲委派模式”才是Java虚拟机在类加载过程中采用的一种重要机制。

continue、break和return的区别是什么?

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:

  1. continue:指跳出当前的这一次循环,继续下一次循环。
  2. break:指跳出整个循环体,继续执行循环下面的语句。

return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:

  1. return;:直接使用 return 结束方法执行,用于没有返回值函数的方法
  2. return value;:return 一个特定值,用于有返回值函数的方法
public static void main(String[] args) {boolean flag = false;for (int i = 0; i <= 3; i++) {if (i == 0) {System.out.println("0");} else if (i == 1) {System.out.println("1");continue;} else if (i == 2) {System.out.println("2");flag = true;} else if (i == 3) {System.out.println("3");break;} else if (i == 4) {System.out.println("4");}System.out.println("xixi");}if (flag) {System.out.println("haha");return;}System.out.println("heihei");
}

运行的结果是:

0
xixi
1
2
xixi
3
haha


http://www.ppmy.cn/news/1541498.html

相关文章

QGraphics类型学习使用【Qt】【C++】

QGraphics类型学习使用 需求过程全部完整代码 首先已知&#xff0c;QGraphicsView&#xff0c;QGraphicsScene, QGraphicsItem&#xff0c;分别称为&#xff1a;视图&#xff0c;场景&#xff0c;图元&#xff0c;图表就是各种各样的元素&#xff0c;图片元素&#xff0c;线条元…

【橙子老哥】C# 实操分布式事务解决方案

hello&#xff0c;大家好&#xff0c;今天来到橙子老哥的分享时间&#xff0c;希望大家一起学习&#xff0c;一起进步。 欢迎加入.net意社区&#xff0c;第一时间了解我们的动态&#xff0c;文章第一时间分享至社区 社区官方地址&#xff1a;https://ccnetcore.com (上千.net…

【Hive】8-Hive性能优化及Hive3新特性

Hive性能优化及Hive3新特性 Hive表设计优化 Hive查询基本原理 Hive的设计思想是通过元数据解析描述将HDFS上的文件映射成表 基本的查询原理是当用户通过HQL语句对Hive中的表进行复杂数据处理和计算时&#xff0c;默认将其转换为分布式计算 MapReduce程序对HDFS中的数据进行…

RabbitMQ进阶_可靠性

文章目录 一、 发送者的可靠性1.1、 生产者重试机制1.2、 生产者确认机制1.2.1、确认机制理论1.2.2、确认机制实现1.2.2.1、定义ReturnCallback1.2.2.2、定义ConfirmCallback 二、 MQ的可靠性2.1、 数据持久化2.1.1、 交换机持久化2.1.2、 队列持久化2.1.3、 消息持久化 2.2、 …

HTTP安全么?如何更好的保护您的网站

在互联网飞速发展的今天&#xff0c;网络安全问题日益严峻。HTTP作为最常见的网络通信协议&#xff0c;虽然在传输效率方面表现优异&#xff0c;但其安全性却常常令人担忧。许多企业和个人网站在使用HTTP进行数据传输时&#xff0c;可能忽视了其中潜在的风险。那么&#xff0c;…

kafka自定义配置信息踩坑

org.apache.kafka.common.config.ConfigException: Invalid value 0 for configuration acks: Expected value to be a string, but it was a java.lang.Integer 场景描述&#xff1a; 单个kafka使用springboot框架自带的 yml 配置完全OK&#xff08;因为底层会帮我们处理好类…

探索 JavaScript 事件机制(一):从基础概念到实战应用

前言 在现代前端开发中&#xff0c;JavaScript 事件是实现用户交互的核心机制之一。无论是按钮点击、鼠标移动还是键盘输入&#xff0c;这些用户操作都会触发特定的事件&#xff0c;从而使网页变得更加动态和响应式。然而&#xff0c;许多初学者对事件的概念和使用方法感到困惑…

上拉电阻和下拉电阻在电路中的作用(一)

上拉电阻和下拉电阻在电路中的作用&#xff08;一&#xff09; 1.什么是上下拉电阻2.上下拉电阻的作用&#xff1a;2.1.维持输入引脚处于稳定状态。2.2.配合三极管和MOS进行电平转换电路设计2.3.OC、OD电路&#xff08;Open Collector集电极开路、Open Drain漏电极开路&#xf…