草庐IT

Multithreading

全部标签

java - 使 Spring bean 的行为类似于 ExecutorService 的 ThreadLocal 实例

在我的网络应用程序中,我有一个后台服务。此服务使用Generator类,该类包含一个Engine类和一个配置为使用多线程并接受GeneratorTasks的ExecutorService。@ComponentpublicclassGenerator{@AutowiredprivateEngineheavyEngine;privateExecutorServiceexec=Executors.newFixedThreadPool(3);//IactuallypassthesingletoninstanceGeneratorclassintothetask.publicvoidsubmit

java - JavaFX 中的复杂并发 : using ObservableLists and Properties from multiple worker threads

我有多个工作线程和一个JavaFXGUI,它报告这些线程中发生的事情。线程之间共享的数据很多,需要可视化。所以我使用ObservableList和Property能够轻松地在JavaFX中显示数据。我制作了一个小示例应用程序来展示与我的应用程序中发生的情况类似的内容。它有2个列表,工作线程将数据从一个列表移动到另一个列表。状态字符串保持最新。完整的示例代码可以在http://codetidy.com/6569/找到(此代码会崩溃,稍后查看)这是共享的ObservableList的&属性:privateObservableListnewItems;privateObservableLis

java - 主线程的 sleep 抛出 InterruptedException

我有生成新线程的主执行线程。在main()的主执行线程中,我调用了Thread.sleep()。我什么时候会收到类型为InterruptedException的未处理的异常?。我不确定为什么会收到这个。我认为这是因为我需要对主线程的引用,所以我继续通过Thread.currentThread()对其进行引用。这不是让线程hibernate的方法吗?我需要做的是让主线程等待/sleep/延迟,直到它再次需要工作。 最佳答案 您看到的是一个编译错误,因为您没有正确处理已检查的异常(在本例中为InterruptedException)。处

java - while(true) ServerSocket Listen 的效率

我想知道典型的while(true)ServerSocket监听循环是否需要整个核心来等待并接受客户端连接(即使在实现可运行并使用Thread.start())我正在实现一种分布式计算集群,每台计算机都需要它拥有的每个核心来进行计算。主节点需要与这些计算机通信(调用修改算法功能的静态方法)。我需要使用套接字的原因是跨平台/跨语言的能力。在某些情况下,PHP将调用这些java静态方法。我使用了一个java分析器(YourKit),我可以看到我正在运行的ServerSocket监听线程,它从不hibernate并且一直在运行。有没有更好的方法来做我想做的事?或者,性能影响可以忽略不计吗?如

java HashMap 线程可见性

我在初始化时完全加载了一个javaHashMap,但是在初始化之后多个线程将从HashMap读取数据。我想避免任何类型的同步,因为map本质上是只读的并且永远不会改变。但是我能保证所有键和值对所有线程都是可见的吗? 最佳答案 如果map的内容永远不会改变,那么您就没有问题。只有当变量的内容发生变化时,内存模型可见性问题才会发挥作用。您可能希望同步map的初始化,以确保在完全初始化之前没有线程访问它,并确保加载到map中的值都是可见的。编辑:最初我完全忽略了map如何初始化的问题。看完oneofthePugharticles(再次)似

Java:如何区分wait()中的虚假唤醒和超时

这是一个线程正在等待notify()或超时的情况。这里添加了一个while循环来处理虚假唤醒。booleandosleep=true;while(dosleep){try{wait(2000);/***Writesomecodeheresothat*ifitisspuriouswakeup,gobackandsleep.*orifitistimeout,getoutoftheloop.*/}catch(InterruptedExceptione){e.printStackTrace();}}在这种情况下,我如何区分虚假唤醒和超时?如果是虚假唤醒,我需要回去等待。如果超时,我需要跳出循环

java - 如何捕获 Java 中的堆栈溢出并从中恢复?

我正在为一项学生正在实现递归排序算法的作业编写评分程序。这意味着一些学生可能会交出导致堆栈溢出的损坏代码。我想以某种方式捕获调用学生代码时发生的堆栈溢出,以便我可以从他们的分数中扣除并继续进行其他测试。不幸的是,堆栈溢出似乎并没有通过其他异常的标准路径——try/catchblock似乎没有帮助。有没有办法在发生堆栈溢出后返回执行我的代码?我已经研究过使用线程来执行此操作,但它似乎又回到了无法使用try/catch的状态。 最佳答案 当调用你学生的方法时,你应该将调用嵌入到try-catchblock中,并将Exception作为T

java - 为什么无法检查当前线程是否持有ReentrantReadWriteLock的读锁?

我发现ReentrantReadWriteLock的写锁提供了一个isHeldByCurrentThread()方法来检查调用线程是否持有那个锁。但是读锁没有对应的isHeldByCurrentThread()方法。为什么不呢? 最佳答案 我认为答案在DougLeas对这个问题的评论中:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6207928.DougLea写道:Thecurrentdesignandbehaviorareintentional.Read-locksaren

java - 使用简单的自定义日志记录框架通过线程将消息记录到 JavaFX TextArea 的最有效方式

我有一个像这样的简单自定义日志记录框架:packagesomething;importjavafx.scene.control.TextArea;publicclassMyLogger{publicfinalTextAreatextArea;privatebooleanverboseMode=false;privatebooleandebugMode=false;publicMyLogger(finalTextAreatextArea){this.textArea=textArea;}publicMyLoggersetVerboseMode(booleanvalue){verboseM

java - Kafka Consumer 卡在 .hasNext in java

我在java中有一个简单的Kafka消费者,代码如下publicvoidrun(){ConsumerIteratorit=m_stream.iterator();while(it.hasNext()&&!done){try{System.out.println("Parsingdata");byte[]data=it.next().message();System.out.println("Founddata:"+data);values.add(data);//arraylist}catch(InvalidProtocolBufferExceptione){e.printStackT