我将尝试尽可能准确地描述问题:
我必须通过TCP(套接字)向254个可能的设备“192.168.1.2-255”发送一个流,因为我需要确保信息能够很好地到达,并在最短的时间内完成。
如果我一次执行一行,超时为200ms(非常小),则该过程需要51秒。
如果我在不同的线程中执行每一行,只需要一两秒钟,但会创建254个线程加上程序本身拥有的线程,尽管它们只持续一秒钟。
我想发送的对象是基本的,这是一个类似的例子:
class Usuarios implements Serializable {
private int id,ip;
private String name;
//Constructor, Getters and Setters, etc...
}
有没有办法解决这个问题而不必每个周期等一下,或者运行超过250个线程?
澄清:也许形式就是这样,但是执行这么多线程似乎太多了,即使它是一秒钟的循环并且每10个重复一次。 我已经看过java.NIO库,但它没有说明如何发送序列化对象。非常感谢你。
答案 0 :(得分:0)
发送数据throut套接字不需要繁重的cpu usae,而是使用高i / o。使用像netty这样的异步库,您可以使用少量线程获得最快的结果。同样使用更加兼容的序列化(如protocol buffer)可以减少发送数据所需的时间
答案 1 :(得分:0)
嗯,解决方案是以下列方式使用ExecutorService和Runnable类:
//10 Threads to execute the task
ExecutorService threadpool = Executors.newFixedThreadPool(10);
Runnable task = new Runnable() {
@Override
public void run() {
//Task to do with socket's
}
};
threadpool.submit(task);
threadpool.shutdown();