jjzjj

ScheduledThreadPoolExecutor

全部标签

android - 用于安排固定速率任务的处理程序或计时器

我正在开发一个应用程序,它要求它每x分钟上线一次并检查一些新数据。为防止大量网络和数据使用,任务应以固定速率运行,但用于此类解决方案的最佳方法是什么?Handler还是Timer对象? 最佳答案 使用Timer有一些缺点它只创建一个线程来执行任务,如果一个任务运行时间太长,其他任务受到影响。它不处理任务抛出的异常,线程只是终止,这会影响其他计划任务,它们永远不会运行。另一方面,ScheduledThreadPoolExecutor可以正确处理所有这些问题,使用Timer没有意义。有两种方法可以用于您的情况scheduleAtFixe

android - 定期任务的 ScheduledThreadPoolExecutor(使用 Retrofit)只触发一次,永远不会再触发

我有以下代码用于每X秒从服务器轮询一次未读通知计数我通过App.onCreate()中的ScheduledThreadPoolExecutor开始这个过程,Log.d("XXX","RequestingNotificationcountfromserver...");被调用一次(我可以在Logcat中看到),但是两个Retrofit回调函数都没有被调用(实际上没有Retrofit调试日志)。此外,“从服务器请求通知计数......”再也不会打印出来(即周期性任务未运行)我也将Retrofit用于其他网络服务调用(根据用户输入)并且它们工作正常(我可以在logcat中看到传入和传出的请求

java - RxAndroid 在相机更改时去抖谷歌地图

我有一个使用谷歌地图并监听相机变化的应用程序。我的问题是每次更改相机时我都必须请求我的后端。我想做的只是通过使用RxAndroid/Java去抖动来限制请求的数量。我的代码是这样的:Observable.create(newObservable.OnSubscribe(){@Overridepublicvoidcall(Subscribersubscriber){if(!subscriber.isUnsubscribed()){map.setOnCameraChangeListener(newGoogleMap.OnCameraChangeListener(){@Overridepub

ScheduledThreadPoolExecutor踩过最痛的坑

概述最近项目上反馈某个重要的定时任务突然不执行了,很头疼,开发环境和测试环境都没有出现过这个问题。定时任务采用的是ScheduledThreadPoolExecutor,后来一看代码发现踩了一个大坑....还原"大坑"这个坑就是如果ScheduledThreadPoolExecutor中执行的任务出错抛出异常后,不仅不会打印异常堆栈信息,同时还会取消后面的调度,直接看例子。@TestpublicvoidtestException()throwsInterruptedException{//创建1个线程的调度任务线程池ScheduledExecutorServicescheduledExecut

java - Java 中的工作线程

我需要通过线程每分钟从表中读取数据,然后执行某些操作。任务完成后,我是否应该启动一个线程并将其置于sleep模式1分钟?然后再次检查表是否有数据,再次执行任务并hibernate1分钟...这是正确的方法吗?任何人都可以为我提供一些Java示例代码来执行相同的操作吗?谢谢! 最佳答案 通常,来自java.util.concurrent的Java5扩展包在这里提供了巨大的帮助。你应该使用ScheduledThreadPoolExecutor.这是一个小的(未测试的)示例:classToSomethingRunnableimplemen

java - 无论线程如何,对象是否总是看到其最新的内部状态?

假设我有一个带有简单整数计数变量的runnable,该变量在每次runnable运行时递增。此对象的一个​​实例被提交以在预定的执行程序服务中定期运行。classCounterimplementsRunnable{privateintcount=0;@Overridepublicvoidrun(){count++;}}Countercounter=newCounter();ScheduledExecutorServiceexecutorService=Executors.newScheduledThreadPool(5);executorService.scheduleWithFixe

java - 有界队列与 ScheduledThreadPoolExecutor 的最佳方式是什么?

SunJava(1.6)ScheduledThreadPoolExecutor是ThreadPoolExecutor的扩展,内部使用DelayQueue的实现,它是无界的排队。我需要的是一个带有有界队列的ScheduledThreadpoolExecutor,即它对队列中累积的任务有限制,所以当队列中的任务超过限制时,它开始拒绝进一步提交任务并防止JVM内存不足。令人惊讶的是,google或stackoverflow没有指出任何讨论这个问题的结果。有没有我错过的这样的东西?如果没有,我如何实现ScheduledThreadpoolExecutor以最佳方式为我提供预期的功能?

java - 预定的 future 会导致内存泄漏吗?

我认为我的Android动态壁纸存在内存泄漏。每当我旋转屏幕时,收集的内存垃圾量都会增加50kb,而且不会下降。我认为这可能是由预定的future引起的,所以我将提出一个场景,看看是否是这种情况。假设您有一个包含以下成员的类(我们称之为Foo)。privateScheduledFuturefuture;privatefinalScheduledExecutorServicescheduler=Executors.newSingleThreadScheduledExecutor();privatefinalRunnablerunnable=newRunnable(){publicvoid

java - CompletableFuture.Delayer 中的静态 ScheduledThreadPoolExecutor

在java-9中newmethodcompleteOnTimeout在CompletableFuture类中引入了:publicCompletableFuturecompleteOnTimeout(Tvalue,longtimeout,TimeUnitunit){if(unit==null)thrownewNullPointerException();if(result==null)whenComplete(newCanceller(Delayer.delay(newDelayedCompleter(this,value),timeout,unit)));returnthis;}我不明

java - quartz 性能

似乎Quartz调度程序每秒可以运行的作业数是有限制的。在我们的场景中,我们每秒大约有20个作业以24x7的速度启动,而quartz每秒可以很好地处理多达10个作业(对于JDBC支持的JobStore,具有100个quartz线程和100个数据库连接池大小),但是,当我们将其增加到20每秒作业数,quartz变得非常非常慢,并且其触发的作业与实际预定时间相比非常晚,导致许多失火并最终显着降低系统的整体性能。一个有趣的事实是,这种延迟触发的JobExecutionContext.getScheduledFireTime().getTime()会比预定时间晚10-20分钟甚至更多。在不影响