我在服务器端监听了两个端口,这两个端口都是要对多个线程进行处理的
在对多线程的处理上我采用的是executorservice来处理
现在问题是我在对这两个端口处理的时候都要用到executorservice,请问在一个程序里面能同时用多个executorservice吗
在对多线程的处理上我采用的是executorservice来处理
现在问题是我在对这两个端口处理的时候都要用到executorservice,请问在一个程序里面能同时用多个executorservice吗
这个和端口监听有关吗我觉得你的设计上有问题,端口监听这种动作应该是阻塞-处理-阻塞的模式
线程池的处理概念是对单个任务的处理你应该考虑下自己的设计了
server1 = new ServerSocket(port1);
server2 = new ServerSocket(port2);
//然后用两个线程来处理
thread1 = new ServerThread(server1);
thread2 = new ServerThread(server2);thread1.start();
thread2.start();
//在ServerThread里面用的是executorservice来进行多线程处理socket = server.accept();
//有一个处理线程handler(socket);
然后用executorservice.execute来处理handler我的意思是这样的话,我就会new 两个executorservice,他们之间会不会有什么影响这样的设计有问题吗
在于线程池来说,他针对的是任务
每个任务,在理论上来说应该是有自身独立的上下文环境
每个任务只执行一次
所以在线程池的任务内就不应该有while循环了,那样就失去使用线程池的意义了
你把socket对象直接传入的话,还得安排核心线程的Lock在于ServerSocket来说,每接收一次socket,应该给予一个单独的线程进行处理,而不是线程池的任务
至于多个线程池,是不会有相互影响的,每个线程池会负责维护自身的核心线程和任务队列
楼上的说的有道理
但是如果在对每个socket = server.accept();进行处理的时候都用new Thread(socket).start的话,而不用线程池的话,效率是不是要低一些呢,我对于每个socket的处理是要传送一些数据,大概在100个字节左右吧,而且在其处理任务里面需要采用同步机制,因为采用了一个hashmap来存储每个socket