【问题标题】:How to get the minimum value of a variable common to several runnable objects?如何获得几个可运行对象共有的变量的最小值?
【发布时间】:2011-09-20 00:51:54
【问题描述】:

我正在尝试使用线程和 MVC 来模拟各种战斗序列。详情:

  • 每个生物都有一个主动得分,决定谁先走。
  • 每个生物都必须陈述其预期目标。
  • 生物被加载到“战斗”类的堆栈中;得分最低的生物首先进入堆叠。
  • 一旦每个生物都选择了一个目标,堆栈就会清空,并且生物会按照他们的先手顺序行动,最高优先。

分配约束要求我将这些生物作为单独的线程处理。问题是:

  • 我不知道如何让“战斗”类意识到它必须处理堆栈上的动作,因为不会有更多的生物进入它。
  • 我认为“战斗”必须有办法知道所有正在运行的线程中最低的主动得分,但我不知道如何管理它。

如果我不能更清楚地说明这一点,我深表歉意。真是令人沮丧。

【问题讨论】:

  • 查看使用优先级队列的 ThreadPoolExecutors。让主应用程序将每个可运行的生物推送到队列中,然后执行池执行器,这些执行器将依次按优先级顺序运行。一旦 ThreadPoolExecutors 完成,冲洗重复
  • 这仍然有点超出我的专业知识。去查一下,看看我能用它做什么。谢谢:)
  • 跳出舒适区在编程中很重要。虽然当您不知道自己在寻找什么时,深入了解这样的事情总是好的:)
  • 考虑添加作业标签。

标签: java multithreading variables


【解决方案1】:

如果不知道此作业的确切要求,很难给出一个好的答案,但这里有一些想法供您参考。

Combat 类需要知道它何时拥有所有动作,以便处理它们。要么每个生物每回合都需要进行一次战斗动作,或者有一些方法可以表明它不会进行战斗动作或类似的东西。如果没有这些信息,您将不知道何时处理这些移动。

按主动顺序处理移动是有道理的,但是您是否需要将它们按顺序推入堆栈。添加所有移动然后排序或使用优先级队列似乎是一个更好的解决方案。如果要求战斗类只接受特定顺序的动作,那么是的,它需要知道最低分数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2015-06-20
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    相关资源
    最近更新 更多