java - 如何通过两个线程打印非重复元素?

标签 java spring

我想通过两个线程从同一资源打印非重复元素。

在下面的代码中,正在打印重复的元素

class TestSleepMethod1 extends Thread{  
    public void run(){  
        for(int i=1;i<5;i++){  
            try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}  
            System.out.println(i);  
        }  
    }

    public static void main(String args[]){  
        TestSleepMethod1 t1=new TestSleepMethod1();  
        TestSleepMethod1 t2=new TestSleepMethod1();  

        t1.start();  
        t2.start();  
    }  
}  

输出:

1 1 2 2 3 3 4 4 。我希望,如果一个线程打印“1”,其他线程不应再次打印“1”,而应该打印 2 。如何达到这个条件呢? 谢谢。

最佳答案

您可以拥有一个队列(例如:BolockingQueue)并将所有数字添加到其中。然后在添加后通知线程,该线程应该从队列中一一取出值。这将帮助您实现您想要的结果。 请参阅http://tutorials.jenkov.com/java-concurrency/blocking-queues.html

关于java - 如何通过两个线程打印非重复元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586685/

相关文章:

具有多个聚合的 Java 8 流分组依据

Spring JPA 批量更新插入很慢(1,000 个实体需要 20 秒)

java - Spring 服务垃圾收集

java - 在高帧率贪吃蛇游戏中,我应该如何跟踪片段的运动?

java - 存储用户数据 Java Swing

java - 一个类是否可以有一个仅存在于该类的实例中的数据成员(如果它不为空)?

java - 为什么这个引用不起作用?

java - 在多个 JVM 上测试 Spring 应用程序

java - Spring Boot 中 MessageSource 的 NoSuchMessageException

java - Spring应用的集成测试