问题标签 [java.util.concurrent]
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.
java - 为什么 CountDownLatch.getCount() 返回一个 long 但不是 int?
我查看了代码,一切都是int——传递给CountDownLatch构造函数的参数是int,Sync中的变量是int,Sync.getCount()的返回类型是int。但是 CountDownLatch.getCount() 返回一个 long 吗?想知道为什么。
java - ExecutorService awaitTermination 卡住了
我用 制作了一个固定大小的线程池Executors.newFixedThreadPool(2)
,并执行了 10 个Runnable
对象。我设置断点并跟踪执行。但是,fixedSizeThreadPool.awaitTermination()
即使所有任务都已完成,也不允许我继续。
基本上:
但这总是卡在awaitTermination
. 怎么了?
java - 寻找 java.util.Set 的无界、基于队列的并发实现
我正在寻找具有以下功能的 java.util.Set 的实现:
- 应该是并发的,而不是同步锁定;所以很明显我不想使用Collections.synchronizedSet ()。
- 应保持插入顺序。所以 ConcurrentSkipListSet 并不可取,因为它使用 compareTo() 作为 equals(),并且需要提供 Comparable 或 Comparator 的实现。还有一个ConcurrentLinkedHashMap,尽管有 LinkedHashMap,但它不保持插入顺序。
- 应该是无界的。
- 推荐使用 FIFO 链表,因为我的操作只针对队列的第一个元素。
据我所知,唯一合适的 impl 是CopyOnWriteArraySet,但它在文档中指出:
可变操作(添加、设置、删除等)代价高昂,因为它们通常需要复制整个底层数组。
就我而言,我有很多插入到队列末尾(集合)和很多从队列头部删除(和读取)。那么,有什么推荐吗?
java - 轮询多个线程和 CPU 使用率
我有一个调用,从用户那里接收作业列表,说用户发布了 3 个作业 A、B 和 C,它们都开始在自己的线程 AT、BT 和 CT 中执行,然后我开始监视这 3 个线程,如果其中一个作业失败说 B 失败,我需要通知 A 和 C 停止。当所有线程停止时返回,当所有线程失败时全部为真,如果一个失败为假。
目前我有一个大的 while 循环,它会检查并休眠 50 毫秒,这很有效,但我想知道我是否有更好的方法可以在没有任何睡眠的情况下做到这一点,我尝试休眠 0 毫秒 AFAIK 这让我的线程结束cpu que,但它仍然使用了太多的 cpu,大约 60%。
java - 为什么没有“awaitTermination(截止日期)”方法?
我有一个提交给ExecutorService
. 但是我需要在凌晨 2:30 的最后期限之前关闭 ExecutorService,即使任务没有完成。我怎样才能做到这一点?我检查了API,只有一个方法如下:
但是我怎样才能使下面的块原子地执行呢?也就是说,我怎样才能避免差距?例如:
谢谢。
java - Java并发:如何异步获取工作线程的响应
我是java.util.concurrent
包装新手。我正在尝试编写一些示例。这是我的一些示例代码片段:
我有一个关于从工作线程处理 Future 对象的问题。在我的 for 循环中,任务的处理是按顺序进行的;可以说,我需要处理来自工作线程的返回结果,如果我的第二个工作线程在第一个工作线程之前完成,那么在我的代码中没有办法先处理第二个工作线程。
任何人都可以建议处理当前线程的最佳方法。
谢谢,文卡特帕帕纳
java - Java并发:我可以使用工作线程创建一个池吗
我是java.uti.concurrent
包装新手。我正在尝试使用ExecutorService
. 这是我的主要代码片段:
我的MyTask
班级有一个ExecutorService
对象,它将提交MyTask2
任务。(我的意图是为我的每个套接字连接执行多线程处理)
我的应用程序正在接受我的套接字客户端请求并创建池MyTask2
,执行良好。但是只有在完成我的第一个请求后才接受我的第二个套接字客户端连接。
任何人都可以让我知道如何解决这个问题。
提前致谢。
-文卡特·帕帕纳
java - 以固定速率调度 Callable
我有一个要以固定速率运行的任务。但是,我还需要每次执行后的任务结果。这是我尝试过的:
任务
不,我尝试使用ScheduledExecutorService
来安排它。事实证明,您不能Callable
以固定的速率安排 a,只能Runnable
这样做。
请指教。
java - 执行器任务的所有副作用在 invokeAll 之后是否可见?
如果我将一些任务提交给Executor
using invokeAll
,我是否保证提交的线程会看到任务执行的所有副作用,即使我没有调用get()
每个返回Future
的 s?
从实际的角度来看,这似乎是一个有用的保证,但我在 javadoc 中看不到任何内容。
更准确地说,Callable
提交给执行程序的主体中的所有操作是否都发生在调用返回之前invokeAll()
?
无用地调用get()
每个未来是很烦人的,而实际上返回类型是Void
并且没有抛出异常——所有的工作都是作为副作用发生的。
java - 处理带有 null 结果的 java.util.concurrent.Future
如果我提交任务,并且 futureTask.get() 返回 null,我想以另一种方式处理我在 Callable 对象中发送的内容。调试时,我可以看到我的 Future 有一个名为“sync”的私有 final 成员。“同步”包含我的可调用对象,其中包含我在可调用对象中发送的原始数据。不幸的是,我无法做到。
在伪代码...
似乎应该有办法做到这一点?谢谢。