【问题标题】:Selecting Random Thread in Java在 Java 中选择随机线程
【发布时间】:2011-12-13 23:11:36
【问题描述】:

我的主类中有三个线程,如果这些线程同时运行,我怎样才能使每个线程在迭代中随机出现?例如我有:

线程 1

线程 2

线程 3

在第一次迭代中,它可能看起来像:线程 2、线程 1、线程 3,第二次可能会有不同的组合。

此外,我的每个线程都有不同的结果,在这种情况下分配了一个枚举。 此外,每次执行这三个线程时,都会有其他三个线程比较这些线程的结果并根据该结果执行其他执行。然后该过程再次开始。

【问题讨论】:

  • 你能解释一下“迭代中每个线程随机出现”是什么意思吗?
  • 线程在做什么工作?他们只是打印一行,还是从工作队列中消费?

标签: java multithreading random


【解决方案1】:

如果你有办法通知它们,你可以将它们存储在数组或列表中,然后选择一个随机数来决定你想要哪个。

或者,您可以让每个线程 sleep() 的时间长度随机。这应该会导致足够的随机性,但可能不依赖于生产代码,因为您不能保证它们会唤醒。 (他们有 99.999999999% 的可能性会出现,但这一小部分突然出现的次数超出了应有的程度,而且总是在你负担不起的时候。)

请注意,最后一个可能会以如下方式结束:

线程 1

线程 2

线程 1

线程 3

线程 2

【讨论】:

    【解决方案2】:

    如果您的任务不在同步方法或块中,则这些任务是同时发生的。除了强制一个线程等待另一个线程完成之外,绝对没有办法控制任务的完成顺序,这是非常低效的。

    如果您的任务在同步方法或块中,那么首先没有理由使用多线程,因为同步块一次只能由一个线程执行。

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 2014-01-28
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多