首页
学习
活动
专区
圈层
工具
发布

Java线程面试题 Top 50

它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它...首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。...这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可能会在另一个内核运行,这样会重建缓存。为了避免重建缓存和减少等待重建的时间就可以使用它了。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...避免锁定和缩小同步的范围 锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。因此相对于同步方法我更喜欢同步块,它给我拥有对锁的绝对控制权。

1.4K20

多线程面试50题(转)

它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它...首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。...这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可能会在另一个内核运行,这样会重建缓存。为了避免重建缓存和减少等待重建的时间就可以使用它了。你可以查看这篇文章获得更多信息。...47) 如果同步块内的线程抛出异常会发生什么?   这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...避免锁定和缩小同步的范围 锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。因此相对于同步方法我更喜欢同步块,它给我拥有对锁的绝对控制权。

49220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 编程中关于异常处理的 10 个最佳实践

    Java 编程语言也允许你创建新的异常,并通过使用 throw 和 throws关键字抛出它们。...3)在堆栈跟踪中包含引起异常的原因 很多时候,当一个由另一个异常导致的异常被抛出的时候,Java库和开放源代码会将一种异常包装成另一种异常。日志记录和打印根异常就变得非常重要。...只要你不过度使用检查型异常,你可以最大限度的减少这类情况,这样做的结果是你会得到更清洁的代码。你同样可以使用Java7的新功能,以移除重复项。...7)记住对性能而言,异常代价高昂 需要记住的一件事是异常代价高昂,同时让你的代码运行缓慢。...使用标准异常而不是每次创建我们自己的异常,对于维护性和一致性,不管是现在还是以后,都是最好的选择。

    69240

    50道Java线程题

    它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因 为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它...首先,通 过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。...这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可 能会在另一个内核运行,这样会重建缓存。为了避免重建缓存和减少等待重建的时间就可以使用它了。你可以查看这篇文章获得更多信息。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...避免锁定和缩小同步的范围 锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。因此相对于同步方法我更喜欢同步块,它给我拥有对锁的绝对控制权。

    1.4K70

    Java线程面试题 Top 50

    它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它...首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。...这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可能会在另一个内核运行,这样会重建缓存。为了避免重建缓存和减少等待重建的时间就可以使用它了。你可以查看这篇文章获得更多信息。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...避免锁定和缩小同步的范围 锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。因此相对于同步方法我更喜欢同步块,它给我拥有对锁的绝对控制权。

    1.3K20

    50道Java线程题

    它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因 为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它...首先,通 过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。...这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可 能会在另一个内核运行,这样会重建缓存。为了避免重建缓存和减少等待重建的时间就可以使用它了。你可以查看这篇文章获得更多信息。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...避免锁定和缩小同步的范围 锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。因此相对于同步方法我更喜欢同步块,它给我拥有对锁的绝对控制权。

    1.8K110

    JavaScript 编程精解 中文第三版 八、Bug 和错误

    如果你有兴趣为你的程序添加更多的严谨性,我建议你尝试一下。 在本书中,我们将继续使用原始的,危险的,非类型化的 JavaScript 代码。...它只不过是换了一种方式来彻底破坏你的程序罢了。异常真正强大的地方在于你可以在堆栈上设置一个“障碍物”,当异常缩减堆栈到达这个位置时会被捕获。一旦发现异常,你可以使用它来解决问题,然后继续运行该程序。...在多数 JavaScript 环境中,构造器实例也会收集异常创建时的调用栈信息,即堆栈跟踪信息(Stack Trace)。...我们可以在catch代码块中判断捕获到的异常是否就是我们期望处理的异常,如果不是则将其重新抛出。那么我们该如何辨别抛出异常的类型呢? 我们可以将它的message属性与我们所期望的错误信息进行比较。...如果你拥有自动化测试套件或向程序添加断言,则问题会变得更容易被注意。 我们常常需要使用优雅的方式来处理程序可控范围外的问题。如果问题可以就地解决,那么返回一个特殊的值来跟踪错误就是一个不错的解决方案。

    1.7K100

    Java 异常处理的 20 个最佳实践,你知道几个?

    Java 编程语言也允许创建新的自定义异常,并通过使用 throw 和 throws关键字抛出它们。...最常见的例子是 NullPointerException, 未经检查的异常可能不应该重试,正确的操作通常应该是什么都不做,并让它从你的方法和执行堆栈中出来。...还抛出异常,那么exceptionOne将永远丢失 } 只要 cleanUp() 永远不会抛出任何异常,上面的代码没有问题,但是如果 someMethod() 抛出一个异常,并且在 finally 块中...如果在 finally 块中调用的代码可能会引发异常,请确保要么处理它,要么将其记录下来。永远不要让它从 finally 块中抛出来。...这个原则隐含地说,你将更有可能把它放在低级方法中,在那里你将检查单个值是否为空或不适合。而且你会让异常堆栈跟踪上升好几个级别,直到达到足够的抽象级别才能处理问题。

    1.1K20

    异常处理

    当某个异常条件触发时,Python会抛出(raise)一个异常对象,然后程序的控制流将被转移到处理该异常的代码块。异常处理的机制允许程序员在程序中检测并处理错误,以避免程序崩溃。...一般来说,异常包含了3大部分:异常类型、异常信息、异常堆栈。 1)异常类型:异常类型是指异常的分类,它指定了异常的种类。指示了引发异常的具体情况。...这样根据不同的错误码就可以很清楚的知道是什么错误类型。...test() 执行结果: 所以可以看到,通过跟踪异常的堆栈信息,可以很容易定位到具体的错误代码。 注:使用e.with_traceback()打印的错误信息,只能在控制终端打印信息,并不能持久化。...raise 语句可以包含一个异常类、一个异常类的实例,或者是一个异常类和一个异常消息: # 引发指定类型的异常 raise ValueError("This is a custom error message

    48510

    译文:开发人员面临的 10个最常见的JavaScript 问题

    因此,您不能使用等式运算符(==,===, !=,!==)确定一个值是否为NaN。...一个常见示例是一次添加一个DOM元素系列的代码。添加DOM元素是一项代价高昂的操作。连续添加多个DOM元素的代码效率低下,并且可能无法正常工作。...所以现在我们得到了: JavaScript 问题#8:创建对实例方法的错误引用 让我们定义一个简单的对象,并创建它的一个实例,如下所示: 现在,为了方便起见,让我们创建一个对whoAmI方法的引用,...否则将被忽略或默默失败的代码错误现在将生成错误或抛出异常,更快地提醒您代码库中的JavaScript问题,并更快地将您引导到它们的源代码。 ·防止意外的全局。...){})时,它会抛出错误,从而捕获代码中几乎可以肯定的错误,否则您可能会浪费大量时间跟踪。

    2K20

    乌克兰程序员的新编程语言:一个大型数据结构

    今年推出了一种由一个巨型数据结构组成的新编程语言——这样程序员就可以避免给事物命名。...这促使 Kaleniuk 使用高度抽象的隐式编程来确定面向堆栈的语言。...但我可以赚一些钱,捐给那些有能力的人。从 2 月份开始,我就一直在做这件事,并且我计划一直做到胜利。” 反响 今年早些时候,Kaleniuk 发现他的编程语言在 Hacker News 上被讨论。...“根据我自己的经验,从事像这样的‘愚蠢’项目,例如,具有严格的人为限制,可能非常有趣且具有挑战性,并且可以得出可以应用于以后的实际项目的经验教训。”...我的意思是,我确实成功地把它从我的系统中清除了,而且我不知何故不再想玩它了。” “它漂亮吗?不,”Kaleniuk在 LinkedIn 上发帖说。“它实用吗?当然不。它有趣吗?比你想象的要有趣。”

    23400

    2022 java中高级常见面试题及答案

    它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它...首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。...这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可能会在另一个内核运行,这样会重建缓存。为了避免重建缓存和减少等待重建的时间就可以使用它了。...47) 如果同步块内的线程抛出异常会发生什么?   这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...避免锁定和缩小同步的范围 锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。因此相对于同步方法我更喜欢同步块,它给我拥有对锁的绝对控制权。

    97230

    一文看懂 .NET 的异常处理机制、原则以及最佳实践

    finally 异常堆栈跟踪 堆栈跟踪从引发异常的语句开始,到捕获异常的 catch 语句结束。 利用这一点,你可以迅速找到引发异常的那个方法,也能找到是哪个方法中的 catch 捕捉到的这个异常。...一个可以参考的判断方法是——判断这件事发生的频率: 如果这件事并不常见,当它发生时确实代表发生了一个错误,那么这件事情就可以认为是异常。...例如这些情况都应该认为是异常: 方法中某个参数不应该传入 null 时但传入了 null 这是开发者使用这个方法时没有遵循此方法的契约导致的,让开发者改变调用此方法的代码就可以完全避免这件事情发生 而下面这些情况则不应该认为是异常...有两种方法来避免异常: 先判断再使用。 例如读取文件之前,先判断文件是否存在;例如读取文件流时先判断是否已到达文件末尾。...表示类型初始化的时候发生了错误 .NET 设计失误 FormatException 因为当它抛出来时无法准确描述到底什么错了 首先是你自己不应该抛出这样的异常。

    1.6K41

    Java编程思想核心笔记

    } } } 第五章 初始化与治理 随着计算机革命的发展, “不安全” 的编程方式已逐渐成为编程代价高昂的主因之一 使用构造器确保初始化 初始化期间, 编译器自动调用构造器 构造器实际上是...TreeMap 按照比较的结果升序保存键, LinkedHashMap 则按照插入的顺序保存键, 同时还保留了 HashMap 的查询速度 迭代器 编码中只是使用容器, 不着调或者不关心容器的类型, 那么如何才能不重写代码就可以应用于不同类型的容器...迭代器(也是一种设计模式)的概念可以用于达成此目的. 迭代器是一个对象, 它的工作是遍历并选择序列中的对象, 而不必知道底层的数据结构....迭代器是轻量级对象: 创建代价小 iterator() 方法返回一个 Iterator 对象 使用 next() 获得序列中的下一个元素 使用 hasNext() 检查序列中是否还有元素 使用 remove...() 也完全一样, 移除并返回列表的头, 列表为空时抛出异常 NoSushElementException; poll() 稍有差异, 列表为空时返回 null removeLast() 移除并返回列表的最后一个元素

    78820

    Effective-java-读书笔记之异常

    exception的异常.第71条 避免不必要地使用受检的异常受检的异常强迫程序员处理异常的情况, 大大增强了可靠性.但是过分使用受检的异常会使API使用起来非常不方便.如果方法抛出一个或多个受检的异常...Java 8开始, 这种负担加重, 因为抛出受检异常的方法不能直接在流中使用.如果正确地使用API并不能阻止这种异常条件的产生, 并且一旦产生异常, 使用API的程序员可以立即采取有用的动作, 这种负担就被认为是正当的...把受检的异常变成未受检的异常"的一种方法是, 把这个抛出异常的方法分成两个方法, 其中第一个方法返回一个boolean, 表明是否该抛出异常. -> 状态测试方法.第72条 优先使用标准的异常使用标准异常的好处...加log供之后研究.第74条 每个方法抛出的异常都要有文档始终要单独地声明受检的异常, 并且利用Javadoc的@throws标记, 准确地记录下抛出每个异常的条件.虽然Java并不要求方法声明它可能会抛出的未受检异常...可以在类的文档注释中说明这个异常.第75条 在细节消息中包含能捕获失败的信息程序由于未被捕获的异常失败的时候, 会打印该异常的堆栈轨迹, 包含该异常的toString()结果: 通常包含类名和细节消息(

    66361

    Java之Java关键字及其作用

    每个对象都是类的一个实例。要使用类,通常使用 new 操作符将类的对象实例化,然后调用类的方法来访问类的功能。...如果任何封闭 try 块都未捕获到异常,Java 解释器将退出,并显示错误消息和堆栈跟踪信息。...如果某个特定异常类未被任何 catch 子句处理,该异常将沿着调用栈递归地传播到下一个封闭 try 块。如果任何封闭 try 块都未捕获到异常,Java 解释器将退出,并显示错误消息和堆栈跟踪信息。...如果任何封闭try块都未捕获到异常,Java解释器将退出,并显示错误消息和堆栈跟踪信息。 char char是Java原始类型。 char变量可以存储一个Unicode字符。...如果某个特定异常类未被任何catch子句处理,该异常将沿着调用栈递归地传播到下一个封闭try块。如果任何封闭try块都未捕获到异常,Java解释器将退出,并显示错误消息和堆栈跟踪信息。

    1.3K10

    【收藏篇】Java关键字 及其 更详细介绍

    每个对象都是类的一个实例。要使用类,通常使用 new 操作符将类的对象实例化,然后调用类的方法来访问类的功能。...如果任何封闭 try 块都未捕获到异常,Java 解释器将退出,并显示错误消息和堆栈跟踪信息。...如果某个特定异常类未被任何 catch 子句处理,该异常将沿着调用栈递归地传播到下一个封闭 try 块。如果任何封闭 try 块都未捕获到异常,Java 解释器将退出,并显示错误消息和堆栈跟踪信息。...如果任何封闭try块都未捕获到异常,Java解释器将退出,并显示错误消息和堆栈跟踪信息。 char char是Java原始类型。 char变量可以存储一个Unicode字符。...如果某个特定异常类未被任何catch子句处理,该异常将沿着调用栈递归地传播到下一个封闭try块。如果任何封闭try块都未捕获到异常,Java解释器将退出,并显示错误消息和堆栈跟踪信息。

    95120

    Python “异常处理机制” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

    程序将终止,并显示一个错误跟踪 C. 异常将被自动忽略 D. finally块将捕获并处理该异常 题18:下列哪个语句可以用来捕获所有类型的异常,并且还能获取异常对象?...题目35: 在Python中,可以使用raise语句在else子句中抛出异常。 题目36: 异常传播的过程中,如果某个异常被捕获并处理,那么它的堆栈跟踪信息会被清除。...题17: 答案:B 解析:如果try块中引发了一个异常,但没有对应的except块来处理它,程序将终止,并显示一个错误跟踪(包括堆栈跟踪和异常信息)。...题目20: 错误 解析:在Python中,异常对象一旦创建,其某些属性(如异常消息和堆栈跟踪)可能是不可变的,但其他属性(如自定义异常类的实例属性)是可以被修改的。...题目36: 错误 解析:异常传播的过程中,如果某个异常被捕获并处理(即在except块中执行了相应的代码),那么它的堆栈跟踪信息不会被清除。

    1.2K10
    领券