- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
前言:我正在学习Java,但经验不是很丰富。如果 1)我以一种愚蠢的方式解决这个问题或 2)我的问题不清楚,我深表歉意。我很想知道我的方法是否完全错误,所以请尝试向我展示光明,而不是简单地告诉我我处于黑暗中(我已经很清楚我被黑暗包围了,哈哈)。我很乐意用您需要的任何其他信息来更新/编辑这篇文章,请询问我。我尝试过搜索这个问题,但要么我使用了错误的关键字,要么这个问题太愚蠢了,任何人都不会问。
class NetworkingThread implements Runnable {
@Override
public void run() {//Need this to throw SocketException every 10ms
try {
DatagramPacket dataPacket = receive(ds);//networkIO blocking
//do something
this.run();//recursive call
}
catch (SocketException | SocketTimeoutException e0){
//do something
this.run();//recursive call
}
catch (Exception e1) {
e1.getMessage();
}
}
}
问题: catch block 需要至少每 10 毫秒运行一次。不能单独使用 DatagramSocket.setSoTimeout(),因为需要在最后一个 catch block 执行完成后 10 毫秒抛出异常,而不是距离上次收到数据包 10 毫秒。
我的计划:让 catch block 启动另一个线程,该线程在关闭 receive(ds) 套接字之前将 hibernate (10),以便在适当的时间将 catch 抛出到我的 NetworkingThread 中。
问题:每次需要启动 10 毫秒计数器时创建一个新线程是否更好?或者启动一个线程并在完成任务后暂停执行(不使用已弃用的 API)并等待中断来重新启动它?下面是我的想法的例子。欢迎任何替代解决方案。
class TimerThreadOne implements Runnable {
@Override
public void run() {
try {
Thread.currentThread().sleep(10);
//close socket or interrupt thread in some way
}
catch (Exception e) {
e.getMessage();
}
}
}
class TimerThreadTwo implements Runnable {
@Override
public void run() {
try {
Thread.currentThread().sleep(10);
//close socket or interrupt thread in some way
Thread.currentThread().sleep(1000000);//sleep until interrupted
}
catch (InterruptedException eInterrupt){
this.run();//recursive call
}
catch (Exception e) {
e.getMessage();
}
}
}
最佳答案
看看ScheduledThreadPoolExecutor它已经提供了您想要实现的功能。
您的代码应如下所示。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(someValue);
executor.scheduleWithFixedDelay(new SomeThread(), 0, 10, TimeUnit.MILLISECONDS);
类SomeThread
将实现Runnable
并包含业务逻辑;除了符合业务/系统要求的任何异常处理之外,无需考虑调度、重新运行等。
P.S.:一般情况下不建议使用Exception
作为流量控制。
编辑
等待长时间运行的任务超时
ScheduledExecutorService executor = Executors
.newScheduledThreadPool(10);
ScheduledFuture<?> result = executor.scheduleWithFixedDelay(() -> {// do
// something
}, 0, 10, TimeUnit.MILLISECONDS);
try {
// this will timeout the task after 5ms.
result.get(5, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
// handle exception
result.cancel(true);
}
我冒昧地假设您使用的是 Java 8
关于Java线程: Pause/Resume Thread vs Terminiate/Start New Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269927/
我的几个 Android 应用程序在 logcat 输出中显示以下类型的消息: I/UsageStats( 59): Unexpected resume of com.totsp.test whi
因此,在“On Error GoTo 执行一次”下出现了几个 SO 问题和 Google 结果,几乎在每种情况下,推荐的解决方案都是添加 Err.Clear或者Resume的一些论坛清除错误。 VBA
我正在构建一个基于文本的 RPG,并且我已经成功地向我的程序添加了一些 .wav 文件,我也能够正常播放它们而没有问题任何一个。 目前发生了什么? 我有 2 个 .wav 文件,一个用于一般背景音乐
在那里, 我修改了 Lua 5.0 在线文档中的“perm”示例:http://www.lua.org/pil/9.3.html .我所做的是将 __call() 元方法重新指向 perm() 函数。
我意识到这是一个较旧的编程环境,但我必须清理一些 VB6代码,我发现它大部分使用: On Error Resume Next 使用On Error Resume Next的普遍共识是什么? ? 当然,
当我尝试恢复挂起(可恢复)编排实例时,出现以下错误。 场景:请求通过 DB2 静态请求 - 响应端口,但由于访问权限被拒绝而失败。我可以在管理控制台中看到两个暂停的实例,一个与端口相关,另一个与编排相
如何从最后上传的 block 中获取响应数据?我在任何地方都找不到它,我唯一发现的是您只能在错误时访问该消息 谢谢 最佳答案 找到了!如果您想从上传的文件中检索数据,您需要: r.on('fi
我无法建立exe: 1> ------ Assembly started: project: B, Configuration: Debug Any CPU B.vb (38.9): error BC
我在 aframe (ar.js) 中有一个 360° 旋转动画,我想暂停并继续它,而我所能做的就是暂停但从头开始重新开始。 Animation docum
我认为答案是否定的,但 Twilio 是否提供暂停/恢复录制的功能?用例正在录制通话,但在收集敏感信息时暂停录制。从 REST 文档来看,它似乎不是受支持的功能。认为有人可能已经找到了满足此要求的一些
我有一个包含 5 个模块的多模块 maven 项目。这些模块是分层的,因此一些依赖于构建的第一个(它是我的模型类),而一些依赖于构建的第二个(那些是核心应用程序类)。最后一个构建的是一个依赖于所有其他
如果我运行一个异步调用 onResume 是否有一个好的方法来检测异步调用是否正在运行以不再调用它? 因为我在 fragment 的 onResume 中使用 AsynTask 进行网络调用,它似乎被
如何向这个 javascript 倒数计时器添加恢复按钮? JS $(document).ready(function () { var $worked = $("#timer"); function
找不到明确的答案,基本上我有一个 EditText 字段的 Activity 。软键盘在 list 中设置为可见,因此当 Activity 开始时键盘是可见的,但是如果用户导航离开并使用后退按钮返回,
我正在看generators in Rust ,并决定试一试。我实现了我能找到的最基本的例子: #![feature(generators, generator_trait)] use std::op
我知道这之前已经发布过,但我是 swift 的新手,我想根据我的情况寻求帮助。所以我需要运行一个计时器,当 stopMusic() 被调用时(在我的应用程序中的某个地方),我需要暂停计时器,然后当 p
Android 中的共享首选项有问题 - 我希望能够将一些字符串(保存图片的 ID)作为下一次发布的最爱 - 它工作完美,它可以识别 ID 是否已经在共享首选项并在必要时将其删除,但是当我通过按下主页
我在我的 Node.js-express 应用程序中使用 Resumable.js。我可以知道文件传输成功了,因为我可以 console.log(req.body) 并在下面看到这个...... {
一年好景君须记,最是橙黄橘绿时。金三银四,秣马厉兵,没有一个好看的简历模板怎么行?无论是网上随便下载还是花钱买,都是一律千篇的老式模版,平平无奇,味同嚼蜡,没错,蜡都要沿着嘴角流下来了。本次我们基于
启用或禁用错误处理程序。 说明 如果在您的代码中未使用OnErrorResumeNext语句,所发生的运行时错误将显示错误信息,同时,代码的执行也随之终止。但是具体操作由运行代码的主机决定。主机
我是一名优秀的程序员,十分优秀!