目标:每隔一段时间执行某些代码。问题:在性能方面,是否存在显着差异:while(true){execute();Thread.sleep(10*1000);}和executor.scheduleWithFixedDelay(runnableWithoutSleep,0,10,TimeUnit.SECONDS);?当然,后一种选择更洁净。然而,我想知道我是否应该开始一次名为“花几天时间重构遗留代码来告别Thread.sleep()”的冒险。更新:此代码运行在超/兆/超高负载环境中。 最佳答案 您正在处理以数十秒为单位的sleep时间。
在JDK中,它是这样实现的:publicstaticvoidsleep(longmillis,intnanos)throwsInterruptedException{if(millis999999){thrownewIllegalArgumentException("nanosecondtimeoutvalueoutofrange");}if(nanos>=500000||(nanos!=0&&millis==0)){millis++;}sleep(millis);}这意味着nanos参数根本不做任何事情。其背后的想法是在时序更准确的硬件上,它的JVM可以为其提供更好的实现吗?
在JDK中,它是这样实现的:publicstaticvoidsleep(longmillis,intnanos)throwsInterruptedException{if(millis999999){thrownewIllegalArgumentException("nanosecondtimeoutvalueoutofrange");}if(nanos>=500000||(nanos!=0&&millis==0)){millis++;}sleep(millis);}这意味着nanos参数根本不做任何事情。其背后的想法是在时序更准确的硬件上,它的JVM可以为其提供更好的实现吗?
为什么sleep()和yield()方法在java.lang.Thread中被定义为static方法>类? 最佳答案 代码只会在someXThread正在执行时执行,在这种情况下告诉someYThread让步是没有意义的。因此,由于唯一值得调用yield的线程是当前线程,它们使方法static这样您就不会浪费时间尝试调用yield关于someotherthread. 关于Java:为什么Thread.sleep()和yield()是静态的?,我们在StackOverflow上找到一个类似
为什么sleep()和yield()方法在java.lang.Thread中被定义为static方法>类? 最佳答案 代码只会在someXThread正在执行时执行,在这种情况下告诉someYThread让步是没有意义的。因此,由于唯一值得调用yield的线程是当前线程,它们使方法static这样您就不会浪费时间尝试调用yield关于someotherthread. 关于Java:为什么Thread.sleep()和yield()是静态的?,我们在StackOverflow上找到一个类似
我们有一个相当大的应用程序在JBoss7应用服务器上运行。过去,我们使用ParallelGC,但它在一些堆很大(5GB或更多)并且通常几乎填满的服务器中给我们带来了麻烦,我们会经常遇到很长的GC暂停。最近,我们改进了应用程序的内存使用,并在少数情况下为应用程序运行的一些服务器增加了更多RAM,但我们也开始切换到G1,希望减少这些暂停的频率和/或更短。事情似乎有所改善,但我们看到了以前没有发生过的奇怪行为(使用ParallelGC):PermGen似乎很快填满,一旦达到最大值就会触发FullGC,这通常会导致长时间的暂停在应用程序线程中(在某些情况下,超过1分钟)。几个月来,我们一直在使
我们有一个相当大的应用程序在JBoss7应用服务器上运行。过去,我们使用ParallelGC,但它在一些堆很大(5GB或更多)并且通常几乎填满的服务器中给我们带来了麻烦,我们会经常遇到很长的GC暂停。最近,我们改进了应用程序的内存使用,并在少数情况下为应用程序运行的一些服务器增加了更多RAM,但我们也开始切换到G1,希望减少这些暂停的频率和/或更短。事情似乎有所改善,但我们看到了以前没有发生过的奇怪行为(使用ParallelGC):PermGen似乎很快填满,一旦达到最大值就会触发FullGC,这通常会导致长时间的暂停在应用程序线程中(在某些情况下,超过1分钟)。几个月来,我们一直在使
我想等到AndroidImageView中的动画完成*后再继续执行程序,这样做的正确方法是什么?(在这种情况下,“完成”意味着它恰好遍历所有帧并在最后一帧停止。我不清楚这个动画是否会是一个android:oneshot="true"动画,因为我会多次使用它,但它不会连续运行而是间歇性运行)研究/猜测:A.从本质上讲,我的问题似乎是一个Java线程问题,因为AndroidAnimationDrawable实现Java.lang.Runnable.所以也许线程是解决方案。也许答案将包括join?B.其他人的方法似乎是使用AnimationListener,对于我的简单需求,这似乎很困难且不
我想等到AndroidImageView中的动画完成*后再继续执行程序,这样做的正确方法是什么?(在这种情况下,“完成”意味着它恰好遍历所有帧并在最后一帧停止。我不清楚这个动画是否会是一个android:oneshot="true"动画,因为我会多次使用它,但它不会连续运行而是间歇性运行)研究/猜测:A.从本质上讲,我的问题似乎是一个Java线程问题,因为AndroidAnimationDrawable实现Java.lang.Runnable.所以也许线程是解决方案。也许答案将包括join?B.其他人的方法似乎是使用AnimationListener,对于我的简单需求,这似乎很困难且不
在某些情况下,我们大多数人都会这样写:try{Thread.sleep(2000);}catch(InterruptedExceptione){;//donothing}是否正确或错误,仅在某些测试工具中可接受,不是我的观点。我的观点是,同样的代码可以写得更简洁,如下:LockSupport.parkNanos(2000*1000000);有什么理由让我偏爱一种方法而不是另一种方法。 最佳答案 可读性:Thread.sleep有一个非常直观的含义。您将如何描述(向其他开发人员)您对LockSupport.parkNanos的使用?如