java如何做一个发送者线程

时间:2009-07-06 23:37:33

标签: java multithreading queue blocking sender

有人告诉我,通过输出流输出的任何数据(在我的情况下我使用tcp / ip)都可能会阻塞。在这种情况下,我不想通过等待数据出来来暂停应用程序。

我需要一个如何做到这一点的模型。

我需要通过此流发送消息对象。

我在想我需要一个包含这些消息对象的阻塞队列。线程的run()方法将获取任何可用的消息对象并发送它们,而为true。

我的问题是

  1. 有没有比真正的循环更好的方法呢?如果没有要发送的消息,也许在while循环中,我可以告诉线程产生/睡眠。

  2. 有更好的型号可供使用吗?我担心如果我的代码中有一段时间(真实)它会占用等待消息的处理器周期。

  3. 请有经验的人,请告诉我是否有更好的方法。

    谢谢, JBU

2 个答案:

答案 0 :(得分:0)

这是一个很好的机制,只要你的队列是阻塞的。您将在等待另一条消息到达队列时自动生成处理器。

如果以非阻塞方式读取队列,则会浪费大量CPU时间。您通常必须更加努力地做到这一点,但这一切都取决于您使用的队列类型。

答案 1 :(得分:0)

Java已经实现了两种方法:通过阻塞方法(您已经解决过)或非阻塞方法。

通过阻止方法获得异步通信的最简单方法,您可以查看以下答案: question 1041014

如果要使用非阻塞方法,则必须查看NIO框架。在开始实现它并不是特别容易,因为它使用了几个复杂的概念,但是一旦理解了如何处理通信事件,就可以非常简单地实现强大的实现。最后,您将最终使用阻塞方法,因为CPU时间不必浪费,但NIO框架将允许您创建单个线程通信实现,这对于CPU和内存使用非常优化。

看看O'reilly NIO的书。