问题标签 [java-threads]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
45 浏览

java - 在 Worklight Adapter 调用的 Java 类中使用线程

我们正在开发对现有工作灯 (6.2) 适配器的扩展,以添加一些后台内容执行,这对于向调用原始适配器的客户端提供响应不是必需的。
我们考虑实现一个由 java 类支持的新 HTTP 适配器,该类启动一个线程并在原始适配器中调用该适配器,从而执行一种异步执行。

由于工作灯内部结构不公开,我们想知道这种方法是否正确或可能导致一些问题。

我们没有发现文档中报告的任何明确限制。

0 投票
1 回答
1498 浏览

threadpool - 我们应该为长时间运行的线程使用线程池吗?

我们应该为长时间运行的线程使用线程池还是启动我们自己的线程?有一些设计模式吗?

0 投票
2 回答
77 浏览

java - 在循环中杀死非终止进程

我正在使用纯java“blackBox”处理图像,可以通过以下方式表示:

这是一个循环:

几乎所有进程都在 2-5 秒内终止,但有一些(可能 2%)运行了很多分钟,有些似乎没有终止(我不知道为什么)。我想在(比如说)30 秒后终止这些,记录病理图像,然后转到下一个。blackBox 没有 i/o,也没有嵌入方法Thread.isInterrupted()等。

我可以Thread.stop()在 30 秒后终止进程吗?如果是这样,我该怎么做?[我意识到它已被弃用,但我找不到另一种方法。] 或者有没有更好的方法来解决这个问题,而无需修改imageProcess()

本质上,我想将其作为过滤器运行:“拒绝所有处理时间超过 30 秒的图像”。

更新:跟随彼得劳里我正在探索ProcessBuilder

他发布了一个简单的 Java >=1.8 解决方案,我已经接受了。由于我目前使用的是 Java 1.7,因此我发布了自己的答案,该答案适用于早期版本的简单案例。

0 投票
2 回答
244 浏览

android - 如何加快 Android 应用程序从资产加载 140,000 项 ArrayList

我有一个 Java 程序,我刚刚把它变成了一个 slooooooow-to-load Android 应用程序。问题:它处理一个 140,000 字的“字典”(存储在一个Asset文件中),在其中查找匹配“Windows 通配符”模式的单词:例如,S???CK* 将匹配 STICKS、SHACK、STACK、...、STACKOVERFLOW等。在 Windows 7 中速度非常快。在手机上则不然。

我所做的一件事是将所有 140,000 个单词读入一个ArrayList(我对它编译并运行感到震惊),之后,只要该模式不以通配符开头,Collections.binarySearch(...)就可以立即进行查找。

但是将它读入数组列表需要 60 秒,并且用户输入被阻止。并且每次onCreate都必须运行它——即,不可接受的经常发生。

我想加快速度。

这是一个SSCCE完美但太慢的方法:

MainActivity.java

OutputFragment.java

Matcher.java

activity_main.xml

fragment_output.xml

所以我想要的是加快速度。我已阅读“让您的 Android 应用程序保持响应”。不知道能不能适应我的情况。我从那里举了一个例子,并尽我所能调整它:

我没想到它一输入就可以工作,params[0].hasNext()但似乎需要一个变量参数列表。

这是我尝试实现它的方法:

我想我应该放弃这种方法并尝试使用Thread我必须管理的方法。我对此感到不舒服。

欢迎任何有关如何进行的建议。

0 投票
1 回答
44 浏览

java - 为什么使用线程来调用类的构造函数?

我在浏览一本 JMS 书籍时遇到了一个问题。下面是代码。我的问题与线程有关,因此我删除了不必要的 JMS 代码。

在上面的代码中为什么作者将构造函数作为一个新线程来调用。我尝试如下调用构造函数,它给出了相同的结果

那么以上两种方式有什么区别。我知道创建一个新的 Thread() 将创建一个单独的新线程。但是,在这个 JMS 的简单示例中,我是否需要将构造函数作为单独的线程调用?

0 投票
1 回答
58 浏览

multithreading - 操作系统中的线程和编程语言中的线程之间的区别

我正在学习用户级线程和内核级线程。我想知道这些 OS 线程和程序员使用 JAVA 等编程语言编写的线程之间的映射是什么,Python 使用一些线程库。这些是如何映射/相关的。我是这个话题的新手,如果它很愚蠢,对不起。

0 投票
1 回答
254 浏览

android - 3个高频率运行的线程使用相同的变量

我正在开发一个 android 应用程序,它高频接收来自 ble 通知的数据,在屏幕上打印数据并将数据发送到其他外围设备。

这是我的情况:

  1. onCharacteristicChanged 回调在 10hz 接收一个名为“ value ”的字节数组,并将数据解包到一些 float 和 int 变量中

  2. 与 handlerThread 关联的 Handler 每 30hz 启动一个 Runnable。此可运行对象使用从value解包的变量,将新数据保存在一些变量中并将广播消息发送到 UX

  3. 每 10hz 的另一个线程使用步骤 1 和 2 中保存的数据对此变量进行一些数学运算并在特征上写入数据。

在上面的步骤中,我保存并使用了 float、double 和 int 变量。

我害怕处理并发,我正在考虑在步骤 2 和 3 中使用相同的处理程序线程来解决并发问题。但是当另一个通知到达时,我认为存在竞争条件问题:/

其他问题: oncharacteristicchanged 在哪个线程执行?

我的问题的更多信息: 在 oncharacteristicchanged 到达新字节数组(以 10hz 频率)中,我在变量中解压缩数据,在其他线程 B(在 30hz)中使用此数据进行一些计算:发送广播到 ux 并将结果保存在其他一些变量;线程 C 使用线程 B 的结果,它进行一些其他计算并以 10hz 写入特性。

oncharacteristicchanged -> 线程 B -> 线程 C

但我不能停止 oncharacteristicchanged 因为我不知道它在哪个线程中执行..

0 投票
2 回答
147 浏览

java - 在java中使用多线程进行下载

我正在尝试同时下载其网址存储在数据库中的网站的 HTML 代码(大约 300 万个条目)。
很明显,我应该使用多线程技术,但我遇到了如何在 java 中做到这一点的麻烦。

这是我过去在没有多线程的情况下如何做到的:

该函数donloadHTML使用JSoup库来完成主要工作。

感觉我的任务是一种“生产者消费者问题”。我想它可以用这样的方式表示:有一个缓冲区,包含 N 个链接;一些进程从中获取链接并下载 HTML;和一个过程,其目的是在缓冲区变空时将新的 url 从 db 加载到缓冲区中。
但我完全不知道该怎么做。我听说过ThreadsExecutorService提供过,ThreadPools但这对我来说真的很困惑。

0 投票
0 回答
40 浏览

java - 将线程设置为守护线程是否会导致其优先级降低?

我了解守护线程和常规线程之间的区别。通过调用setDaemon(true),线程将被标记为不会让 JVM 保持活动状态。当没有更多的非守护线程运行时,JVM 将自动关闭。启动 JVM 时,只有主线程是非守护线程。

我也明白可以独立设置线程的优先级。通过调用setPriority(Thread.MAX_PRIORITY),线程将被设置为其线程组允许的最大调度优先级。我觉得我对这些概念有很好的把握。

我的问题是 - 守护线程中是否有任何固有的东西会降低其优先级?还是只是一个标志说“你不必等我关闭JVM”?

我正在使用无法通过 API 关闭的共享库中的线程。我已要求将此线程标记为守护线程,但所有者担心这会降低其在调度程序中的优先级。在我看来,由于优先级是与守护线程指定分开管理的,因此它们应该是正交的。但是,我很难找到这方面的文档。

0 投票
1 回答
1097 浏览

java - ExecutorCompletionService 最多等待 n 秒以完成

我正在使用 ExecutorCompletionService 提交一些任务。然后我想等待最大值,比如 5 秒,然后停止处理。

现在我不想等待超过 5 秒才能完成所有任务。我只想收集在 5 秒内完成的任务的结果。我怎样才能做到这一点?

我已经使用shutdownand awaitTerminationon executorService,但我的主线程仍然等待所有提交的任务完成,所有任务完成需要 10 秒并打印每个线程的名称。如何在 5 秒内停止处理?