当前位置: 首页 > 知识库问答 >
问题:

Java线程相同顺序[关闭]

羊丰茂
2023-03-14

想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。

我需要找到一个代码,其中线程的序列总是0 1 2 0 1 2...

我不知道如何同步它们,即使在尝试数小时后,有时它们的顺序是0 1 2,但只运行一次。

共有1个答案

龙景澄
2023-03-14

尝试这样的做法–任何代码都是元代码,而不是真正的Java,请记住:

  • 每个线程最多有一个数字(0、1、2、3)
final AtomicInteger m_LastThread = new AtomicInteger( 0 );
final int m_MaxThread = …

…

public class MyThread implements Runnable
{
  final int m_Id;
  public MyThread( final int id ) { m_Id = id; }

  public final void run()
  {
    ForeverLoop: while( true )
    {
      synchronized( m_LastThread )
      {
        final var lastThread = m_LastThread.get();
        final var doSomething = ((m_Id == 0) && (lastThread == m_LastThread)) || (m_LastThread == m_Id - 1);
      
        if( doSomething )
        {
          m_LastThread.set( m_Id );

          // Do something here!
          …
        }
      }
    }  // ForeverLoop:
  }  //  run()
}
//  class MyThread

如果线程死亡,您将遇到问题;在这一点上,整个事情都停顿了。

但这也是一个可以解决的问题,如果您使用令牌(例如枚举)而不是整数值,并将有效令牌放置在表示仍然存在的线程的Set中,并检查前一个线程是否仍然存在。

 类似资料:
  • 问题内容: 您将如何依次执行三个线程?例如。线程1,线程2,线程3。不可能将一个线程的引用传递给另一个线程并从run()方法调用。 因此代码应如下所示: 并应该把 这可以通过使用ThreadPoolExecutor并使用阻塞队列来实现,但即使那样也不是可以接受的答案。 问题答案: 在java.util.concurrent包中使用ExecutorService。更精确地使用

  • 问题内容: 我尝试从一本书(Paul Hyde,Java Thread Programming)中运行示例。它说线程的顺序将互换。但是我总是得到:之后打印10个“主线程”,然后打印10个“新线程”。更有趣的是:如果我将使用tt.run而不是tt.start,那么结果将相反。也许这本书太老了,示例基于JDK 1.2的原因???代码如下: 问题答案: JVM决定何时将控制权从主线程转移到第二个线程。由

  • 线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。 进程是正在运行的程序的实例,或者:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

  • 在我的应用程序中,在程序的整个生命周期中,有n个操作必须依次发生。我决定为每个操作创建一个线程,让它们执行一次run方法,然后等待所有其他线程都执行相同的操作,等待轮到它,然后再次执行,依此类推,而不是创建实现这些操作的方法并在while(true)循环中按顺序调用它们。。。 为了实现这个机制,我创建了一个名为StatusHolder的类,它有一个名为threadTurn的字段(表示应该执行哪个线

  • 我必须制作一个非常简化的联合银行账户程序(在这个例子中,有3个用户都可以访问银行账户资源),但是我在正确使用Java线程时遇到了问题。 以下是该程序的工作原理。有些“用户”都可以访问一个具有任意设置的初始余额的联合银行账户(我使用了5000)。他们每个人都可以在一次运行的程序中提取或存款三次(无论是提取还是存款,每次都是随机生成的)。 他们存款或取款的金额也是随机生成的,唯一的规则是金额永远不能超

  • 问题内容: 我正在尝试在我正在处理的Python项目中使用线程,但是线程似乎没有按照我的代码的预期运行。似乎所有线程都按顺序运行(即,线程2在线程1结束后开始,它们不是同时启动)。我编写了一个简单的脚本来对此进行测试,并且该脚本也按顺序运行线程。 这是我从运行它得到的输出: 循环的迭代次数更多时,观察到相同的行为。 我尝试搜索网络和较早的SO答案,但找不到任何有帮助的方法。有人可以指出这段代码有什