Java - 有时,在多线程环境中不会更新对象

时间:2014-11-07 02:11:26

标签: java multithreading

我有一个对我来说非常奇怪的问题。

我正在编写一个多线程客户端 - 服务器框架,到目前为止,它运行良好,除了一件事

考虑以下图片:

客户端可以请求添加到队列中的任务。如果此队列中有任何元素,则轮询它们并将其添加到“正在执行”的队列中。然后使用ExecutorService在单独的线程上执行相关任务。

检查“执行”队列是否已完成已完成任务的任务,并移至“已完成”队列。将检查此队列,并将回复分派给相应的客户端。

这一切都有效,除非在系统中运行一个任务。

每个任务都保存在TaskRequest对象中,每个任务都可以返回其“主机”TaskRequest。但是,看起来好像来自任务的引用不同来自......井......实际TaskRequest

在图片上,我突出显示了TaskRequestresultBag,以表明他们有不同的地址和ID。

正如我所提到的,这只是在系统中有多个任务的情况下,并且它对我来说是不可思议的。

complete字段未更新,尽管我已通过在设置后输出变量值来检查此字段。

为什么“主机”对象没有更新?

下面是相关类的代码,Pastebinned以减少空间。

TaskRequest code

TaskBase code (extended by other tasks)

TaskQueue code (keeping of all the tasks, requested, executing and completed, respectively)

TaskExecutor code (running over the TaskQueue instance, executing tasks, etc)

我很抱歉发布了一些文字墙。

0 个答案:

没有答案