草庐IT

Multithreading

全部标签

java - 将逻辑线程与事件调度线程分开

这是我的项目中最小的可运行SSCCE,我可以实现它来向您展示。我读到从EventDispactthThread调用游戏逻辑是一种不好的做法,我怎样才能将它们分开,因为如您所见update()和repaint()关联成循环以及如何以一种漂亮的方式分离代码,我在这方面遇到了麻烦,试图找出如何做到这一点。我已经发布了一个类似的问题,我得到了一个答案,说使用SwingTimer,但我有很多任务要做,正如我所读的那样,Swingtimer并不适合这种情况。这就是问题所在:EventDispatchThreaddividedfromlogicthread,preventblockingUI主类im

基于可用 FREE cpu 的 Java 并发性

问题当且仅当有空闲CPU时,我如何扩展以使用更多线程?像ThreadPoolExecutor这样的东西,它在cpu核心空闲时使用更多线程,如果没有空闲则更少或只使用一个线程。用例现状:我的Java服务器应用程序处理请求并提供结果。有一个ThreadPoolExecutor以合理数量的最大线程为请求提供服务,遵循以下原则:cpu核心数=最大线程数。执行的工作是cpu繁重的,并且有一些磁盘IO(DB)。代码是线性的,单线程的。处理单个请求需要50到500毫秒。有时每分钟只有几个请求,有时同时有30个请求。具有12个内核的现代服务器可以很好地处理负载。吞吐量不错,延迟还可以。期望的改进:当请

java - 等待/通知和等待/中断有什么区别?

synchronized(Foo.class){while(someCondition){try{Foo.class.wait();}catch(InterruptedExceptione){e.printStackTrace();}}}似乎当其他线程在该线程上调用interrupt()或notify()时,该线程都会被唤醒。两者有什么区别吗?--编辑--我知道一个是通知对象,另一个是中断线程。但是这两种情况的结果都是一样的,就是这个线程被唤醒了,所以我想问的是这2种情况的结果有什么不同。 最佳答案 当线程在某个监视器上调用通知时,

java - 中断/杀死正在运行的线程

在发生特定超时时,我需要终止/取消/中断/使正在运行的线程失败。我使用ExecutorService来管理线程池,通过它我可以使用Future的cancel()方法取消任务,该方法将其从ExecutorService的View中删除,但线程本身继续运行。网上环顾四周,人talkaboutinterruptingthreads有一个使用isInterrupted()方法的循环或正在等待可以通过显示InterruptedException来处理的IO。杀死既不循环(或没有任何其他Hook)也不等待IO的线程的一般做法是什么?环顾四周,Thread.stop()似乎可以满足我的需要(只是盲目

java - Socket同时读写

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我正在尝试编写一个非常简单的套接字程序,我基本上想要的是客户端在while(true)循环中不断监听来自服务器的通信。现在我还希望客户端能够在监听过程中将一些数据发送回服务器。我能想到的唯一解决方案是为读写创建一个线程,并在每次我必须进行写入时中断读取线程。是否有更好的解决方案或者这是我能做到的唯一方法

java - 在 Java 中清理线程

我有一个Java方法可以对输入集执行两种计算:估计答案和准确答案。总是可以在可靠的时间内廉价地计算出估计值。有时可以在可接受的时间内计算出准确的答案,有时则不能(先验未知......必须尝试看看)。我想要设置的是一些框架,如果准确答案花费的时间太长(固定超时),则使用预先计算的估计值。我想我会为此使用一个线程。主要的问题是用于计算准确答案的代码依赖于外部库,因此我无法“注入(inject)”中断支持。此问题的独立测试用例在这里,展示了我的问题:packagetest;importjava.util.Random;publicclassInterruptableProcess{publi

java - 线程完成后是否释放锁?

我在一些地方读到,获取一个Lock对象而不将后面的代码包含在try...finallyblock中并不是好的编程习惯,所以即使抛出异常也可以释放锁。这听起来像是一个简单的问题:属于线程的所有锁是否会在线程结束时自动释放?我问这个问题的原因是我正在处理的程序是这样的,一旦一个线程获得了一个锁,在它完成之前它应该没有理由放手。此外,我是使用锁的新手,所以我想知道是否有任何我可能没有考虑过的陷阱。我是否必须担心在线程完成之前显式释放我的代码中的锁,或者我是否可以将它留给JVM,确信在某些知识上被阻塞的所有Activity线程锁上的其他线程将在Activity线程被激活后立即激活线程停止了吗?

java - 当我们有 LinkedBlockingQueue 时,为什么要使用 ConcurrentLinkedQueue?

我为什么要使用ConcurrentLinkedQueue当我有LinkedBlockingQueue?我知道ConcurrentLinkedQueue是非阻塞的但是LinkedBlockingQueue可以用作ConcurrentLinkedQueue.我会用put()/offer()插入方法和poll()去除方法。poll()如果队列为空,方法不会等待。LinkedBlockingQueue也是无界的。所以我可以使用它。到目前为止我发现的差异是ConcurrentLinkedQueue在LinkedBlockingQueue时使用带有比较和交换的硬件级同步机制正在使用Reentran

java - Camunda BPM 的 JavaDelegate 类应该是线程安全的吗?

主要问题是关于静态字段和单例实例(用于配置等)-是一个进程在不同环境中运行的实例线程,像往常一样的servlet请求?如果看得更深一些-不同@ProcessApplication在一个JVM中运行并会看到相同的单例吗?我不这么认为。我确切地知道他们的类彼此看不到并且可以具有相同的名称(因为不同的类加载器?)尚未找到关于这些关于Camunda的重要主题的任何有意义的信息,将不胜感激您的回答。 最佳答案 我前一段时间对我们的一个场景有同样的问题,并阅读了他们的Javadocasmentionedhere对于servlet容器。提取Jav

java - Thread.currentThread().sleep(timer) vs Thread.sleep(time);

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Java:Thread.currentThread().sleep(x)vs.Thread.sleep(x)...之间有什么区别Thread.currentThread().sleep(time)和Thread.sleep(time);还有一件事是我可以在不使用线程类的情况下延迟程序的任何其他方法...