【问题标题】:How can I get my threaded program to print specific output如何让我的线程程序打印特定的输出
【发布时间】:2012-10-05 13:49:00
【问题描述】:

我在处理同步 java 线程、应用等待和通知时遇到问题。

我想弄清楚如何在可以交替打印答案的程序中实现这些。例如,person1 将计算数字 1-5 以及 person2,输出应该是这样的。

person1 count 1
person2 count 1
person1 count 2
person2 count 2
person1 count 3
person2 count 3
person1 count 4
person2 count 4
person1 count 5
person2 count 5

谢谢大家。

【问题讨论】:

  • 你不能这样做。 java调度程序有自己的算法来决定运行哪个线程。听起来你想要一个单线程循环。
  • 您想让我们告诉您有关 Java 线程的所有信息吗?你想让我们为你写一个程序吗?你能说得更具体些吗?
  • 在 Java 7 中,您可以为此使用 Phaser。在 Java 7 之前,最合适的可能是 CountDownLatch。但是,如果这不仅仅是对一些真实并发场景的简化,那么就没有理由使用多线程。
  • Java 线程并不意味着做这样的事情。您可以使用锁来做到这一点,但是您必须非常小心不要造成死锁。就我个人而言,我会完全不同地实现这一点。
  • 大家好,感谢您的回复。我不希望您编写整个程序,我只需要您对我应该做什么来实现该输出的想法。我很难理解 java 线程,但我会花更多时间来理解它。我刚接触java,我想学习。在你的帮助下,我知道我能做到。谢谢大家的回复。我会在我的进展中更新你。谢谢。

标签: java multithreading synchronization wait notify


【解决方案1】:

您可以通过两种方式轻松做到这一点:

  1. 使用两个信号量在线程之间传递一个“打印令牌”:线程 1 打印,发送信号量 A,等待信号量 B,然后循环。线程 2 等待信号量 A、打印、发送信号量 B 并循环。

  2. 编写内联单线程代码。

【讨论】:

  • 我认为这将是我的问题的解决方案。但我对信号量一无所知,你能给我提供教程和示例的链接吗?谢谢。
【解决方案2】:

不要使用等待和通知。使用同步块。

如需深入了解 Java 监视器的工作原理,包括代码示例,您可以访问此处:http://www.artima.com/insidejvm/ed2/threadsynch.html

【讨论】:

  • 这并不能回答问题 - 特别是我看不到使用同步块将如何交替线程。
  • 技术上wait/notify 包括使用synchronized 块,因为您需要持有锁才能调用wait/notify
  • Tudor:我知道同步在技术上只是包装了等待/通知,我只是认为语义更清晰,更容易理解。 assylias:踏板将按照监视器的优先顺序交替。
【解决方案3】:

线程程序的全部目的是线程的异步操作。这就是您获得性能提升的方式,因为不同的任务可以同时在不同的 CPU/内核上工作, 不必相互同步。为了强制这种同步,锁步输出的定义是强制线程做一些非典型的事情。

@Martin 的回答提供了使其工作的替代方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多