Java_Socket_编程绪论.ppt

使用JDK线程池方式创建多线程服务器 public void servic(){ while(true){ try { socket = serverSocket.accept(); //等待用户连接 executorService.execute(new Handler(socket)); //把执行交给线程池来维护 } catch (IOException e) { e.printStackTrace(); } } } 这里使用线程池维护对象的execute方法来执行工作任务。 我们只需要规定线程池的最大线程数量,其他的就都不需要关心了。 如果将线程池的数量设置为1: executorService=Executors.newFixedThreadPool(1); 然后开两个客户端,访问可以发现,和我们没有使用多线程没有区别,这正说明了线程池中只有一个线程。 测试: 使用线程池注意点 虽然使用线程池能大大提高服务器的并发性能,但他也存在一定的风险,比如多线程程序最容易产生的并发和死锁问题。 1、如果任务A需要同步等待任务B的结果,那么A不适合加入到线程池的工作队列中。防止这些如A一样的线程因不能获得B的结果,可能导致死锁。所以不一定要避免这种情况的发生,即使得线程任务尽量职责单一。 2、假设工作线程执行过程中被阻塞(如等待接收用户输入数据,但用户一直不输入,他已经离开了),导

文档评论(0)

1亿VIP精品文档

相关文档