Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让线程程序打印特定的输出_Java_Multithreading_Synchronization_Wait_Notify - Fatal编程技术网

Java 如何让线程程序打印特定的输出

Java 如何让线程程序打印特定的输出,java,multithreading,synchronization,wait,notify,Java,Multithreading,Synchronization,Wait,Notify,我在处理同步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线程、应用等待和通知时遇到问题

我想知道如何在一个可以交替打印答案的程序中实现这些。。例如,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 Monitor的工作原理,包括代码示例,您可以访问这里:

您可以通过两种方式轻松完成这项工作:

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

  • 编写内嵌的单线程代码


  • 线程程序的全部目的是线程的异步操作。这就是性能提升的原因,因为不同的任务可以同时在不同的CPU/内核上工作,而不必彼此同步。为了强制这种同步,锁步输出定义为强制线程执行一些非典型的操作


    @马丁的回答提供了让它工作的替代方案。

    你不能这样做。java调度器有自己的算法来决定运行哪个线程。听起来你想要一个单线程循环。你想让我们告诉你Java中的所有线程吗?你想让我们为你写一个程序吗?您可以更具体一点吗?在Java 7中,您可以使用
    Phaser
    来实现这一点。在Java7之前,最适合的可能是
    CountDownLatch
    。但是,如果这不仅仅是对一些实际并发场景的简化,那么就没有理由使用多线程。Java线程不应该做这样的事情。您可以使用锁来实现,但是您必须非常小心,不要创建死锁。就个人而言,我会实现完全不同的。嘿,伙计们,谢谢你们的回应。我不想让你写整个程序,我只需要你的想法,我应该做什么,以实现该输出。我很难理解java线程,但我会花更多的时间来理解它。我刚刚接触java,我想学习。有你的帮助,我知道我能做到。谢谢大家的回复。我会向你汇报我的进展。谢谢。这并没有回答这个问题——特别是我看不出使用同步块将如何交替线程。从技术上讲,
    wait/notify
    包括使用
    synchronized
    块,因为你需要持有锁才能调用
    wait/notify
    。都铎:我知道从技术上讲,同步块只不过是包装而已等等/通知,我只是觉得语义更清晰,更容易理解。亚西莉亚斯:踏板将按照监视器的优先顺序交替。我想这将是我问题的解决方案。但我对信号量一无所知,你能给我提供教程和示例的链接吗?非常感谢。