全部使用TCP协议,通过使用java线程池来实现。把向各个ip发包以及接收消息的任务分别以单个new Runnable()的方式扔给线程池,由线程池自行进行多任务的并发处理。这样既实现了多线程,提高并发,又能把线程数控制得相对较小。
当然不用线程池,自己实现多线程也行,只是简单地实现的话,可能一个ip需要创建一个线程,这样线程数较多,会存在性能瓶颈(线程太多,CPU调度时间会显著增加)。交给线程池处理的话就会避免这种瓶颈,而且自己不需要重新造轮子了。
线程池的使用可以参考下面的代码,Executors里面有很多种线程池,可以根据需要来选择。import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
public class TestThreadPool
{
public static int shareVar = 1;
public static void main(String[] args)
{
ExecutorService threadPool = Executors.newCachedThreadPool();
//ExecutorService threadPool = Executors.newFixedThreadPool(5);
for(int i = 0; i < 100; i++)
{
threadPool.execute(new Runnable()
{
@Override
public void run()
{
String currentThread = Thread.currentThread().getName();
System.out.println("当前是" + shareVar + " " + currentThread);
shareVar++;
}
});
}
threadPool.shutdown();
}
}
2012年11月17日 10:48