2024年150道高频Java面试题(三十)

2024-04-17 08:20

本文主要是介绍2024年150道高频Java面试题(三十),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

59. runnable 和 callable 有什么区别?

RunnableCallable是Java中用于定义可以由线程执行的任务的接口。

  1. 返回值
    • Runnable不返回任何值。它的run()方法没有返回类型,即void
    • Callablecall()方法具有返回值。它可以返回任何类型的对象,也可以抛出异常。
  2. 异常处理
    • Runnablerun()方法不能抛出检查异常(checked exception)。任何发生的异常都需要在内部捕获。
    • Callablecall()方法可以抛出检查异常。
  3. 使用场景
    • Runnable通常用于简单的任务,不需要返回结果。
    • Callable通常用于需要返回结果或者抛出异常的任务。
  4. 执行方式
    • Runnable通常通过Thread类或ExecutorServiceexecute()方法执行。
    • Callable通常通过ExecutorServicesubmit()方法执行,submit()会返回一个Future对象,该对象表示任务的潜在结果。

下面是两个接口的代码示例:

// Runnable 示例
Runnable runnable = new Runnable() {@Overridepublic void run() {// 代码逻辑}
};// Callable 示例
Callable<String> callable = new Callable<String>() {@Overridepublic String call() throws Exception {// 代码逻辑return "Result";}
};

总结:

特性RunnableCallable
返回值
异常处理不能抛出检查异常可以抛出检查异常
使用场景简单任务需要结果或异常的任务
执行方式ThreadExecutorService.execute()ExecutorService.submit()

这两个接口都提供了定义任务的方法,但它们在返回值和异常处理方面有所不同,因此可以根据不同的需求选择合适的接口。

60. 线程有哪些状态?

线程在其生命周期中有几种不同的状态,这些状态描述了一个线程从创建到消亡的过程。以下是Java线程可能处于的状态:

  1. 新建(New)
    • 当一个线程被创建但尚未启动时,它处于新建状态。此时,线程已经存在,但是它的start()方法尚未被调用。
  2. 就绪(Runnable)
    • 一旦线程调用了start()方法,线程进入就绪状态,等待被线程调度器选中获取CPU的执行时间。在就绪状态,线程可能正在执行,也可能在等待CPU分配执行时间。
  3. 运行(Running)
    • 当线程调度器选中一个就绪状态的线程时,该线程进入运行状态,开始执行其run()方法中的代码。
  4. 阻塞(Blocked)
    • 当线程试图获取一个内部对象锁(例如进入一个同步块)而该锁被其他线程持有时,该线程进入阻塞状态。当锁被释放,并且该线程获得了锁,它将返回到就绪状态。
  5. 等待(Waiting)
    • 当线程等待另一个线程执行特定操作时,它进入等待状态。这通常发生在调用Object.wait()Thread.join()或者等待某些LockSupportparking操作时。
  6. 计时等待(Timed Waiting)
    • 和等待状态类似,但线程在等待其他线程执行操作时会等待一个指定的时间。进入计时等待状态的常见方法包括带有超时的Thread.sleep(long millis)Object.wait(long timeout)Thread.join(long millis)等。
  7. 终止(Terminated)
    • 当线程的run()方法正常执行完毕,或者出现未捕获的异常导致线程提前终止,线程进入终止状态。

以下是一个简单的表格来总结上述状态:

状态名称描述
新建线程被创建但未启动
就绪线程准备好执行,等待CPU调度
运行线程正在执行
阻塞线程等待获取内部锁
等待线程无限期等待其他线程的操作
计时等待线程等待其他线程操作,但有超时时间
终止线程完成执行

理解这些状态对于并发编程非常重要,因为它们有助于开发者在编写多线程应用时诊断和解决线程同步和通信问题。

有帮助请点赞收藏呀~

领【150 道精选 Java 高频面试题】请 go 公众号:码路向前 。

这篇关于2024年150道高频Java面试题(三十)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911279

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听