首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不在没有任何理由的情况下使用thread.sleep,并向程序员解释

在没有任何理由的情况下,不建议使用Thread.sleep()方法。Thread.sleep()是Java中的一个方法,用于暂停当前线程的执行一段时间。然而,这种方法存在一些问题和不足之处,因此在没有明确的理由时,应该避免使用它。

  1. 不可靠的时间控制:Thread.sleep()方法只是简单地暂停当前线程的执行,但无法保证暂停的时间是精确的。实际上,线程可能会在指定的时间之前或之后恢复执行,这取决于操作系统和其他线程的调度情况。因此,如果需要精确的时间控制,应该使用更可靠的方式,如使用定时器或计时器任务。
  2. 阻塞其他线程:当一个线程调用Thread.sleep()方法时,它会暂停当前线程的执行,但不会释放它所持有的锁。这意味着其他需要该锁的线程将被阻塞,无法继续执行。如果在多线程环境中频繁使用Thread.sleep(),可能会导致线程间的竞争和阻塞,影响程序的性能和响应性。
  3. 可能引发异常:Thread.sleep()方法在调用时需要处理InterruptedException异常,这是一个受检异常。如果不正确地处理这个异常,可能会导致程序出现错误或崩溃。因此,使用Thread.sleep()需要额外的异常处理代码,增加了代码的复杂性和维护成本。
  4. 不利于代码调试和维护:使用Thread.sleep()方法会使代码变得不可预测和难以调试。由于无法确定具体的暂停时间,可能会导致程序在不同的环境或条件下表现不一致。此外,如果需要修改暂停时间,需要手动修改代码,而不是通过配置文件或参数来控制。

综上所述,除非有明确的理由和特定的需求,否则不建议在没有任何理由的情况下使用Thread.sleep()方法。在实际开发中,应该根据具体的需求选择合适的方式来控制线程的执行时间,如使用定时器、计时器任务或其他并发工具。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

推行六西格玛要多问为什么

一个人可以问或被问到最有力量、最令人困惑和最令人沮丧问题。从很小时候起,我们就把“为什么”作为一种工具来理解,有时会让那些给我们指导或向我们解释的人感到沮丧。...孩子可以通过问一个简单问题“为什么”来挫败父母行为。随着年龄增长,我们仍然把“为什么”作为一种工具,无论是什么背景或动机,在生活中任何情况下。...图片“为什么力量无缝地转变为六西格玛过程关键要素之一。这是DMAIC过程中使用一种技术,在“分析”阶段。在这个过程中,当我们试图分析或理解过程时,我们使用为什么”开始问问题。...这种询问技术是DMAIC过程中最有价值工具之一。在任何特定情况下问“为什么”就会让问题像洋葱一样被剥皮。每次我们问“为什么”,我们都会剥离一层,更接近我们在过程中寻求答案。...有时,在一天结束时,过程背后有合理逻辑,我们可以简单地接受这一立场是有用。然而,很多时候,“为什么问题会剥离那些没有任何理由或逻辑层面。

16330

【创作赢红包】喂,鬼仔,你还在瞒着我偷偷使用强制相等

因此,上面的例子都真实情况下都是假真 (即,在 === 情况下是 false )。 为什么强制相等有这样问题,这要归咎与强制相等规则。...强制相等规则 实际规则很复杂(这也是不使用==原因)。...这解释为什么在数字情况下,== 和 === 之间没有区别。但是,一旦数组中包含了数字以外内容,== 情况就变得很糟糕了。...虽然在对象上定位属性可以通过内联缓存,内联缓存让属性读取变得快速,但在超大容量读取情况下可能会经历 60 倍减速,这可能会使情况更糟。...有其他使用 == 理由吗 现在,=== 非常快! 因此,即使是使用 === 15倍减速,在大多数应用程序中也不会有太大区别。尽管如此,我还是很难想出为什么使用 == 而不是 === 任何理由

5600
  • 你还在瞒着我偷偷使用强制相等

    因此,上面的例子都真实情况下都是假真 (即,在 === 情况下是 false )。 为什么强制相等有这样问题,这要归咎与强制相等规则。...强制相等规则 实际规则很复杂(这也是不使用==原因)。...这解释为什么在数字情况下,== 和 === 之间没有区别。但是,一旦数组中包含了数字以外内容,== 情况就变得很糟糕了。...虽然在对象上定位属性可以通过内联缓存,内联缓存让属性读取变得快速,但在超大容量读取情况下可能会经历 60 倍减速,这可能会使情况更糟。...有其他使用 == 理由吗 现在,=== 非常快! 因此,即使是使用 === 15倍减速,在大多数应用程序中也不会有太大区别。尽管如此,我还是很难想出为什么使用 == 而不是 === 任何理由

    14800

    笨办法学 Python · 续 练习 1:流程

    极限编程(XP)流程在这方面可能是最糟糕,甚至指出,每个程序员都有另一个程序员观察他们工作,并在文本编辑器显示一些错误时候向他们喊叫。我强烈反对不在某些教育背景下,将个人流程元素强加于人流程。...软件不像绘画和写作一样,不是独立创作流程,没有任何理由是这样。软件是一个模块化学科,这意味着你可以自己创造一切,而其他人仍然可以使用它,即使他们永远不会和你谈话,永远不会写程序。...有很少书籍可以帮助你按照自己个人流程工作,并为你定义处理什么,以及为什么。对于你想要专注事情,自我为中心、贪婪、反社会或者暴虐都没有任何错误,所以你可以在你所爱东西上做得更好。...你是否倾向于编写有缺陷代码,而不知道为什么? 你热衷于编程语言,但从来没有实现过任何东西? 你不记得 API 吗?我也是啊 你是否感到自卑或像会被抓住骗子?...这不是你应该永远做事情,但是当你提高编码技能时,这是一个很大帮助。但是,当你询问一些其他更成功程序员,它们流程是什么,要记住,他们没有这样做,很可能他们告诉你不是他们做事情。

    23420

    聊聊多线程那一些事儿(task)之 一聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)

    多线程,一个多么熟悉词汇,作为一名程序员,我相信无论是从事什么开发语言,都能够轻轻松松说出几种实现多线程方式,并且在实际工作种也一定用到过多线程,比如:定时器、异步作业等等,如果你说你没有用过多线程...,我怀疑你是不是一名程序员,哈哈。...为什么要用多线程 其实我们在实际使用过程中,使用多线程目的其实即使为了实现异步+并行,异步:是相对同步,同步就是一个流程安装一个流程执行完毕,异步就是在不影响主流程执行同时,可以执行其他流程...当然了,不是说异步就完全是独立执行,相互间就没有关联关系,其实在异步同时,也可以在特定节点等待阻塞等待异步结果啦。说了半天废话,不要走开,主题才刚刚开始,下面以实际例子来演绎task实际使用吧!...,就不在啰嗦。

    56020

    从一个launch说起Kotlin协成

    这么重要东西竟然不在标准库中,哈哈哈就是这么让人意外吧,既然知道了原因就好说了,无非是dao包 maven gradle… 以我已有项目为例 ?...为了方便起见我们添加了打印标记,我们看到添加Thread.sleep之后我们看到了协成执行,这是为什么呢?...那么对于主线程没有阻塞情况下协成还没开始执行或者执行过程中主线程就已经结束伴随着协成也就被杀死啦 我们修改一下代码 GlobalScope.launch { val thread2...当launch时候会被提供一个context作为上下文,当这个con'text没有分发器或者ContinuationInterceptor时候会使用默认默认分发器。...而默认情况下,协成默认是立即执行,当然了还有其他几种选择比如:Lazy 等 上面的都是大一翻译,总之大意就是协成有一套自己任务分发体系,它是可以高度可定制化…… image.png

    1.3K20

    浅谈设计模式 - 单例模式(一)

    饿汉式 解释:和名字一般,很饿,所以在使用之前就做好了准备 优点: 保证单例对象不会重复 永远不会有重复创建隐患 缺点: 如果对象较大比较占用jvm内存空间 影响性能,带来没有必要对象创建。...,这种方式在实际使用过程中最多 懒汉式 解释:犹如一个懒汉,只有在使用时候,才进行初始化。...; 静态代码块 和饿汉式差不多,这里不在过多赘述,直接上代码: 实现代码: /** * 静态代码块形式,实现单例 * * @Author zhaoxudong * @Date 2020/10...: 解释:序列化和反序列化情况下,会出现问题,因为JAVA序列化从磁盘读取时候,会生成新实例对象,但是这样就会违背单例模式方式 实现代码: package com.zxd.interview.desginpattern.single...扩展:为什么加入readResolve() 方法就可以避免序列化问题 下面是关于《effective Java》解释 ?

    60520

    我在编程20年中学到5件事 - DaedTech

    在过去4-5年中,对程序员需求增长如此之快,以至于程序员数量总是每五年翻一番。结果,拥有5年经验程序员所拥有的行业任职时间比整个行业一半还多。 我现在在这个行业中已经推进了20年。...想象一下,您有一个可以完美使用CalculateBill()方法,但是产品经理徘徊并说:“我们在墨西哥招募了新客户,您在那儿计算帐单有所不同。”...系统中知识重复可以多种方式发生,而简单复制粘贴只是最明显和最晦涩。还有重复知识其他示例: 1.一个for循环和一个代码注释就在其上方,解释了开始,结束和增量。...TDD是有效,但是带来维护成本 大约10年前,我对TDD持怀疑态度。我决定写一篇关于TDD为什么不是那么出色博客文章。...5.证据为王 代码审查或团队或组织内任何其他形式协作过程中,如果您想就任何事情向管理层或领导层提出任何理由,证据就是您朋友。 证据将赢得您论点,尊重,领导角色和职业发展。

    34410

    【Netty】「萌新入门」(四)异步编程模型:利用 Future 和 Promise 提高性能与响应能力

    前言 本篇博文是《从0到1学习 Netty》中入门系列第四篇博文,主要内容是介绍 Netty 中 Future 与 Promise 使用,通过使用异步方式提高程序性能和响应速度,往期系列文章请访问博主...Netty 专栏,博文中所有代码全部收集在博主 GitHub 仓库中; 为什么使用异步?...使用异步编程模式可以提高程序性能和响应速度。...Throwable cause(): 返回导致 Future 失败原因,如果 Future 没有失败,则返回 null。...参考: Netty API reference; 黑马程序员Netty全套教程 ; 上篇精讲:「萌新入门」(三)强大连接管理和关闭处理:ChannelFuture 和 CloseFuture 解析

    53230

    wait方法和sleep方法区别

    不同点: Thread.sleep(long)可以不在synchronized块下调用,而且使用Thread.sleep()不会丢失当前线程对任何对象同步锁(monitor);              ...yet fired; wait                queue.wait(executionTime - currentTime);         } } 在这里为什么使用...System.out.println("total is "+total);       }       notify();     } } } 要分析这个程序,首先要理解notify()和wait(),为什么在前几天纪录线程时候没有纪录这两个方法呢...在其它情况下(sleep啊,suspend啊),这是不可能.    但是注意我前面说,只是暂时放弃对象锁,暂时给其它线程使用,我wait所在线程还是要把这个对象锁收回来呀.wait什么?...这个时候我们来解释上面的程序,简直是易如反掌了.    synchronized(b){...};意思是定义一个同步块,使用b作为资源锁。

    1K50

    第34节:Java当中异常

    在Java中编译上出现错误为所谓语法上等错误,而异常是编译通过,但在运行时产生,和编译是没有什么关系。...e){ e.printStackTrace(); }finally{ // 这里代码这么样都运行,出不出异常都运行 } 异常分Error和Exception两大类,程序员对Error是没有办法...,只能改代码,但对Exception是可以处理,Java中异常处理机制是对系统健壮性体现,使用代码结构可以处理异常代码,记住使用结构:try...catch...finally。...,如上代码解释。...throw作用是生成异常对象,对Java虚拟机抛出异常,throws作用是声明一个函数有可能生成异常,但不在这个函数进行处理,而是通过调用它对象,进行处理。

    40040

    苹果“开除”Facebook,原因是后者违反协议分发数据收集APP

    20美元换来一个APP安装,这似乎是一笔不错交易。然而,用户所付出代价远远不止如此。 据悉,这款APP允许Facebook跟踪用户APP使用历史、私人消息和位置数据等等。...其中,这一证书也允许企业专门为自己员工测试和分发APP,这种情况下,员工可以使用第三方服务下载普通公众无法使用beta版本APP。显然,Facebook利用了这一“便利”。...它不是‘间谍’,因为所有报名参加的人都要经过一个明确流程,我们征求他们许可,并向他们支付报酬。”另外,它也表示其中占比不到5%青少年也获得了父母同意书。...不过,Facebook解释仅仅是针对“数据隐私收集”问题。而对于一向注重“隐私”苹果而言,这并不是它在此次事件中所关注重点。...事实上,App Store中会收集用户数据隐私APP不在少数,拥有企业开发者证书也不是只有Facebook。为什么Facebook证书会被吊销?

    57520

    深入浅出解析JVM中Safepoint | 得物技术

    但是如果深入思考一下,初识安全点时学到知识点还不能解释,所以为了知其所以然,这里提了几个为什么。 (1)为什么会进入安全点 换句话问,是什么触发了进入安全点?...从代码变更记录看,22年9月份有人对这段代码换了一种写法:把for循环变量类型定义成long型,同时注释掉了循环内部Thread.sleep(0)代码,为什么可以这样写以及为什么要这样写这里先按下不表...(3)子线程为什么无法进入安全点 现在已经知道了主线程为什么进入会进入安全点,以及主线程在哪里进入安全点,按照已知知识点JVM会在循环跳转处和方法调用处放置安全点,为什么子线程没有进入安全点?...#getIntVolatile 这个方法和Thread.sleep方法一样,也是一个native方法,为什么这里没有进入像Thread.sleep方法一样进入安全点?...但是高并发情况下,偏向锁会经常失效,导致需要取消偏向锁,取消偏向锁时候,需要 Stop the world,因为要获取每个线程使用状态以及运行状态。

    38710

    JAVA多线程并发基础知识

    并发编程是Java程序员最重要技能之一,也是最难掌握一种技能。它要求编程者对计算机最底层运作原理有深刻理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠多线程并发程序。...本文是最核心理论部分,之后文章都会以此为基础来分析和解释。 一、共享性 数据共享性是线程安全主要原因之一。...Java 中提供多种机制来保证互斥性,最简单方式是使用Synchronized。...这也是代码段一执行结果为什么不正确原因。...ready)时还没有读取到写线程结果,但执行System.out.println(ready)时读取到了写线程执行结果。不过,这个结果也有可能是线程交替执行所造成

    35130

    Redis分布式锁常见坑点分析

    1.1 先说一个暴论:如果料想到有这类异常产生,为什么不在加锁时,就把加锁过期时间设置大一点 不管所续期还是增大加锁时长,都会导致一个问题,其他线程会迟迟获取不到锁,一直被阻塞。...那结果都一样,为什么不直接增大加锁时间? 想法是好,但是实际上,加锁时间设置是我们主观臆断,我们无法保证这个加锁代码执行时间一定在我们锁过期时间内。...作为一个严谨程序员,我们需要对我们代码有客观认知,任务执行可能几千上亿万次都是正常,但就是那么一次它执行超时了,可能由于外部依赖、当前运行环境异常导致。...这个方案程序正常情况下,可以满足我们要求,但是一旦发生异常将导致锁无法释放后果,也就是说只要我们解决这个锁在异常场景下无法释放问题,这个方案还是OK。...希望大家看了有所收获,对日常业务中 Redis 分布式锁使用能有更深理解。

    53461

    学以致用:语言模型在重塑教育中作用

    为什么? 我将这个问题转发给了我首席助手 ChatGPT,它给出了以下回答: ChatGPT: 您 SQL 脚本基本没有问题,但是最后查询语句中联结表方式有点问题。...让我详细说明一下: 表创建和插入数据: 您正确地创建了 person、job 和 did 这三张表,并向其中插入了数据。这部分看起来没有问题。...最后联合查询: 您试图将这些表数据组合起来,以显示每个人做了哪些工作。然而,您使用 INNER JOIN 写查询不会包括一个人没有工作组合(如您示例中 Bob 和“clean”)。...术语 cross join 并不在视线中!学生需要检查生成代码,然后(在LLM帮助下!)解释为什么需要 cross join 以及它是如何起作用。 一些老师现在可能愿意并能够采用这种全新方法。...许多人可能会等到它嵌入在具有保护措施课程中,以确保学生走上正轨。但无论如何,教育领域即将迎来一场巨大变革。 程序员和作家Ellen Ullman喜欢说程序员按照自己形象和愿望创建系统。

    8010

    如何扩展和优化线程池?

    其中有一个方法就是使用线程池。 简而言之,在使用线程池后,创建线程便处理从线程池获得空闲线程,关闭线程变成了向池子归还线程。也就是说,提高了线程复用。...好了,JDK 给我们封装了创建线程池 4 个方法,但是,请注意,由于这些方法高度封装,因此,如果使用不当,出了问题将无从排查,因此,我建议,程序员应到自己手动创建线程池,而手动创建前提就是高度了解线程池参数设置...直接提交队列 : 没有容量,不会保存,直接创建新线程,因此需要设置很大线程池数。否则容易执行拒绝策略,也很危险。...为什么呢?如果仔细看代码,会发现,在进行 100 / 0 时候肯定会报错,但是却没有报错信息,令人头痛,为什么呢?...实际上,如果你使用 execute 方法则会打印错误信息,当你使用 submit 方法却没有调用它get 方法,异常将会被吞没,因为,如果发生了异常,异常是作为返回值返回。 怎么办呢?

    76300

    本地缓存高性能之王Caffeine

    由于Guava大量使用,Guava Cache也得到了大量应用。但是,Guava Cache性能一定是最好吗?也许,曾经它性能是非常不错。正所谓长江后浪推前浪,前浪被拍在沙滩上。...官网地址 测试为什么要基于jmh测试,可以参考知乎上R回答 在HotSpot VM上跑microbenchmark切记不要在main()里跑循环计时就完事。...重要事情重复三遍:请用JMH,请用JMH,请用JMH。除非非常了解HotSpot实现细节,在main里这样跑循环计时得到结果其实对一般程序员来说根本没有任何意义,因为无法解释。...然后CaffeineAPI操作功能和Guava是基本保持一致,并且 Caffeine为了兼容之前是Guava用户,做了一个GuavaAdapter给大家使用也是十分贴心。...("java金融")); 运行结果:读和写都没有情况下,3秒后才过期,然后就输出了null。

    2.3K1619

    分布式系统不得不说CAP定理

    CAP定理理解: 首先,网络分区发生是小概率事件,当网络没有发生分区时候没有任何理由放弃C或者A 其次,在同一个系统中C和A选择可能发生多次,不同子系统可以做不一样选择,当条件不同时做出选择可以不一样...Slave 在机房3,机房3中 Master 3 连接 Slave 在机房1,这样构成一个环,为什么要这样设计?...公众号【转行程序员】回复”加群“,我会拉你进技术群。...面试会被经常问到,比如,你说你使用了消息队列,解决了系统耦合问题,提高了响应速度,那面试官问题:使用消息队列有啥缺点?如果你知道CAP定理这个问题还难吗? 显然消息延迟会带来数据不一致问题。...理想情况下消息不丢失那数据会最终一致,你能保证消息不丢失吗?

    39110

    Java 并发编程:核心理论

    (wait/notify/sleep/yield/join) Java 并发编程:volatile使用及其原理   并发编程是Java程序员最重要技能之一,也是最难掌握一种技能。...本系列会从线程间协调方式(wait、notify、notifyAll)、Synchronized及Volatile本质入手,详细解释JDK为我们提供每种并发工具和底层实现机制。...本文是该系列第一篇文章,是这系列中最核心理论部分,之后文章都会以此为基础来分析和解释。 一、共享性   数据共享性是线程安全主要原因之一。...这也是代码段一执行结果为什么不正确原因。...ready)时还没有读取到写线程结果,但执行System.out.println(ready)时读取到了写线程执行结果。不过,这个结果也有可能是线程交替执行所造成

    42530
    领券