Tag: multithreading

如何检查Java中当前运行的线程数?

我正在寻找一种方法来查看当前运行的线程数 首先通过Windows 编程

如何覆盖java中的thread.start()方法?

我需要在我的java代码中实现thread.start()方法。 请通过覆盖thread.start()方法以及它如何工作的示例告诉我?

如何通过线程访问Runnable对象?

可能重复: need-help-returning-object-in-thread-run-method 你好。 我有一个实现runnable的类,我有一个List,存储用该类的不同对象实例化的Threads。 在线程对象运行它们的情况下,如何访问底层对象的属性? 这是一个例子: public class SO { public static class TestRunnable implements Runnable { public String foo = “hello”; public void run() { foo = “world”; } } public static void main(String[] args) { Thread t = new Thread(new TestRunnable()); t.start(); //How can I get the value of `foo` here? } }

退出Swing应用程序时偶尔会出现InterruptedException

我最近将我的计算机更新为更强大的计算机,配备了四核超线程处理器(i7),因此可以提供大量真正的并发性。 现在我在退出( System.exit(0) )我正在开发的应用程序(使用Swing GUI)时偶尔会出现以下错误: Exception while removing reference: java.lang.InterruptedException java.lang.InterruptedException at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at sun.java2d.Disposer.run(Disposer.java:125) at java.lang.Thread.run(Thread.java:619) 好吧,鉴于它开始发生在具有更多并发能力的硬件上,并且它与线程有关,并且它偶尔发生,它显然是某种时间性的东西。 但问题是堆栈跟踪太短了。 我只有上面的列表。 它根本不包含我自己的代码,因此有点难以猜测bug的位置。 以前有没有经历过这样的事情? 任何想法如何开始解决它? 编辑:因为退出使用System.exit(0)的Swing应用程序可能是“不干净”,但我不想将主框架设置为EXIT_ON_CLOSE因为我想确保在应用程序退出时没有任何关键问题,我添加了一个机制,以便在调用System.exit(0)之前执行主框架的dispose()方法。 所以它现在应该很干净,但偶尔也会发生exception。 它发生在调用System.exit(0)之后; dispose()没有问题。 也就是说,它必须来自一个关闭钩子: mainFrame.dispose(); // No problem! After this returns, all visible GUI is gone. // In fact, if there were no other threads around, […]

Java长时间运行的任务线程中断vs取消标志

我有一个长期运行的任务,如: public void myCancellableTask() { while ( someCondition ) { checkIfCancelRequested(); doSomeWork(); } } 任务可以取消(请求取消,checkIfCancelRequested()检查取消标志)。 通常当我写这样的可取消循环时,我使用一个标志来表示已经请求取消。 但是,我知道我也可以使用Thread.interrupt并检查线程是否被中断。 我不确定哪种方法是首选,为什么,想法? 谢谢, 杰夫

Linux JVM实际上是否实现了线程优先级?

写了一个快速的Java proggy以产生每个优先级的10个线程并计算pi(4 * atan(1)方法),每个BigDecimals 500,000次,加入每个线程并报告run方法的运行时间。 是的,可能不是最好的例子,但保持基本。 我知道Bug4813310 在C中做起来并非易事,但是我们可以假设在Linux JVM上永远不会设置原生优先级吗? $uname -r && grep bogomips /proc/cpuinfo 2.4.33.3 bogomips : 4312.26 $java -version 2>&1 |head -1 Java version “1.6.0_01” $javac T.java && java -Xmx32m -XX:+UseThreadPriorities T 1:3112 2:2636 3:2662 4:3118 5:2870 6:3319 7:3412 8:3304 9:3299 10:3069 看起来没有人会期待的偏差! 那是在一台小型虚拟Linux机器上。 也许只是Sun的? 我们将尝试IBM J9 VM: 1:4091 2:4142 3:3957 4:3905 5:3984 […]

如何查找和停止所有当前运行的线程?

我有一个multithreadingjava项目,我想添加一个方法stop()来停止所有正在运行的线程。 问题是这个项目是由其他人开发的,我不熟悉它如何实现多个线程。 我所知道的是,一旦项目开始,就会调用许multithreading并且它们会永远运行。 有没有办法找到所有正在运行的线程并阻止它们? 我搜索了很多,并找到了如何获取正在运行的线程列表: Set threadSet = Thread.getAllStackTraces().keySet(); 下一步要做什么来阻止所有正在运行的线程? 我想要停止这些线程的原因是我需要将此项目作为捆绑包部署到OSGi容器。 捆绑包启动后,多个线程将永远运行。 所以我需要实现一个destroy()方法来阻止所有线程来控制bundle生命周期。 怎么样 for (Thread t : Thread.getAllStackTraces().keySet()) { if (t.getState()==Thread.State.RUNNABLE) t.interrupt(); } for (Thread t : Thread.getAllStackTraces().keySet()) { if (t.getState()==Thread.State.RUNNABLE) t.stop(); }

为什么ThreadGroup受到批评?

我知道使用Executors而不是ThreadGroup的当前做法: 通常首选的方式来处理线程 从线程等中捕获exception…… 但是, ThreadGroup本身的固有缺陷是什么(我听过那个类的含糊不清的批评)? 谢谢你的回答。 PS。 这似乎没有回答这个问题。

Java Thread:Run方法不能抛出已检查的exception

在Java线程中,’run’方法不能抛出’checked exception’。 我在Core Java(第1卷)一书中遇到过这个问题。 有人可以解释背后的推理吗?

为什么Thread.sleep使用不好

为这个重复的问题道歉,但我还没有找到任何令人满意的答案。 大多数问题都有自己的特定用例: Java – thread.sleep的替代品 有没有更好的或替代的方法来跳过/避免在Java中使用Thread.sleep(1000)? 我的问题是非常通用的用例。 等待条件完成。 做一些操作。 检查条件。 如果条件不成立,请等待一段时间再次执行相同的操作。 例如,考虑一种通过调用其createAPI表来创建DynamoDB表的方法。 DynamoDB表需要一些时间才能变为活动状态,因此该方法会调用其DescribeTable API以定期轮询状态直到某个时间(假设5分钟 – 由于线程调度而导致的偏差是可接受的)。 如果表在5分钟内变为活动状态,则返回true,否则抛出exception。 这是伪代码: public void createDynamoDBTable(String name) { //call create table API to initiate table creation //wait for table to become active long endTime = System.currentTimeMillis() + MAX_WAIT_TIME_FOR_TABLE_CREATE; while(System.currentTimeMillis() < endTime) { boolean status = //call DescribeTable API to get […]