将数据传递给另一个线程java

时间:2014-01-06 21:18:00

标签: java multithreading

我正在创建一个关于Java线程的小应用程序。我希望有一个线程运行,它将分析一小段数据(扑克手),并在检测到手牌成为获胜手牌时输出显示信息。

我已经完成了部件的生成,直到卡座为空,我只需要弄清楚如何将这些数据传递到另一个分析并触发显示消息的线程(只是一个简单的System.out)。

我想对当前正在运行的线程执行此操作,而不是为每个处理并传递构造函数中的牌的手生成新线程。

public static void main(String[] args) {
        Deck myDeck = new PokerDeck();
        DeckHandlerInterface deckHandler = new DeckHandler();

        (new Thread(new ThreadWin())).start();

        for(int x = 0; x < 2; x++) {
            while(myDeck.getDeck().size() >= deckHandler.getHandSize()) {
                deckHandler.dealHand(myDeck.getDeck());
            }
                    deckHandler.resetDeck();
        }

    }

我的deckHandler返回一个集合对象,这是我想传递给另一个线程的对象。这是我不确定该怎么做的部分。

4 个答案:

答案 0 :(得分:1)

你可能想要使用几个BlockingQueue。将生成手的线程放在一个队列中。线程检查手轮询排队并检查它找到的任何手。然后它将结果写入第二个队列,手工生成的线程可以轮询并显示它。

答案 1 :(得分:0)

有很多方法可以实现这一目标。

一种简单的方法可能是创建一个Queue,通过ThreadWin构造函数传递给引用。
然后,您只需从主线程添加要传递到队列的对象,并在ThreadWin线程中侦听队列中的新对象。特别是BlockingQueue似乎很适合这里。

答案 2 :(得分:0)

听起来你可能希望你的“ThreadWin”观察(http://en.wikipedia.org/wiki/Observer_pattern)DeckHandler

基本上,ThreadWin线程将“注册”DeckHandler,以便在DeckHandler获得一批新的PokerHands时得到通知。

当ThreadWin线程被通知时,它将“停止休息”并确定哪只手是最好的。

答案 3 :(得分:0)

您可以使用BlockingQueue创建简单的消费者 - 生产者场景,文档中甚至还有一个简单的示例。

您还应该阅读this以更好地理解并发性。

最好的方法是使用java.util.concurrent包threadpool来执行任务。 Threadpool很好,易于实现,但除了使用线程池之外你不会学到很多东西。