`
sydra
  • 浏览: 5424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

有感于<如果你用单线程写Socket>

阅读更多
看了<如果你用单线程写Socket>楼主写的socket例子,自己今天抽空也写了一个socket的例子,基于concurrent包的线程池的,发出来给大家看看.
package com.sluggard.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ConcurrentServer {
	
	private boolean stat = true;
	
	private ExecutorService executorService = Executors.newCachedThreadPool();
	
	private ServerSocket server;
	
	public void start() {
		try {
			server = new ServerSocket(9999);
			while(stat) {
				Socket socket = server.accept();
				executorService.submit(new MyCallable(this, socket));
			}
			server.close();
			executorService.shutdown();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void stop() {
		stat = false;
	}
	
	//通过这个类提供了一个简单的退出功能
	private static class MyCallable implements Callable<Socket> {

		ConcurrentServer source;
		
		Socket socket;
		
		@Override
		public Socket call() throws Exception {
			String s;
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			while((s = br.readLine()) != null) {
				if("quit".equals(s)){
					socket.close();
					source.stop();
				}
				System.out.println(s);
			}
			return null;
		}

		private MyCallable(ConcurrentServer source, Socket socket) {
			super();
			this.source = source;
			this.socket = socket;
		}

	}

	public static void main(String[] args) {
		ConcurrentServer server = new ConcurrentServer();
		server.start();
	}

}
分享到:
评论
10 楼 sydra 2010-12-22  
yanglei998 写道
boolean值在多线程中会产生同步问题,应该用原子级对象java.util.concurrent.atomic.AtomicBoolean进行控制,每次在改变值之前先boolean value = atomicBoolean.get(); 然后调用atomicBoolean.compareAndSet(value,newValue)进行赋值,这样考虑到了锁的问题又提高了效率.

好办法啊~还是不习惯用java.util.concurrent.atomic包的东西,受益了,非常感谢~
9 楼 xuershan 2010-12-22  
原子级对象是好东东啊
8 楼 yanglei998 2010-12-22  
boolean值在多线程中会产生同步问题,应该用原子级对象java.util.concurrent.atomic.AtomicBoolean进行控制,每次在改变值之前先boolean value = atomicBoolean.get(); 然后调用atomicBoolean.compareAndSet(value,newValue)进行赋值,这样考虑到了锁的问题又提高了效率.
7 楼 sydra 2010-12-22  
yangyi 写道
boolean 要同步 不然可能会有问题

很有道理啊~是个boolean加上volatile好呢?还是给stop方法加上synchronized好呢
6 楼 yangyi 2010-12-20  
boolean 要同步 不然可能会有问题
5 楼 zhaoxin1943 2010-12-20  
没看出有什么特别的地方.....
恕本人愚钝。
4 楼 sydra 2010-12-20  
C_J 写道
纳闷了,写Socket怎么不用NIO呢?是实时性要求很高吗?

改进下:Executor记得shutdown。


我在28行有写shutdown啊~
3 楼 AppleRipe 2010-12-19  
强调服务端并发的话还是用NIO实现比较好,concurrent包提供了一些线程管理,同步方面的API,写服务端可以参考mina的实现
2 楼 Silence_Smile 2010-12-18  
请问这个例子里用线程池的意义在哪里呢?
1 楼 C_J 2010-12-17  
纳闷了,写Socket怎么不用NIO呢?是实时性要求很高吗?

改进下:Executor记得shutdown。

相关推荐

    JSP实践之旅.exe

    Tomcat.JSP&lt;br&gt;JSWDK环境安装与配置&lt;br&gt;Resin服务器平台介绍&lt;br&gt;Resin在IIS中的安装配置&lt;br&gt;JRun2.3平台介绍&lt;br&gt;Unify eWave ServletExec...用JSP做的日历&lt;br&gt;JSP技巧集锦(一)&lt;br&gt;关于JSP写文件的补充&lt;br&gt;JSP文件操作...

    Surveillant

    &lt;br&gt;&lt;br&gt;有感于配置管理员做配置库记录的工作量繁重,测试人员不了解文件版本变化,不知道如何有重点、有策略性地进行回归测试。所以写了这么一个小程序帮助解决问题,作为配置管理流程中的沟通工作的一个补充。&lt;br&gt;...

    超级注意复杂整合环境中的Filter-Mapping的顺序--配置单点登陆及UrlRewrite有感

    这篇博客“超级注意复杂整合环境中的Filter-Mapping的顺序--配置单点登陆及UrlRewrite有感”深入探讨了如何在这样的环境中正确配置Filter和Mapping,以实现单点登录(Single Sign-On, SSO)以及URL重写。下面我们将...

    有感于态度决定一切.doc

    有感于态度决定一切.doc

    有感于课程改革的实施.doc

    有感于课程改革的实施.doc

    有感于旧书范文.doc

    【标题】:“有感于旧书范文.doc”引发的思考:书籍与时光的对话 【描述】:这篇文档以旧书为引子,探讨了时间、记忆与个人成长的深刻主题,暗示着书籍不仅是知识的载体,更是生活痕迹的见证。 【标签】:文学、...

    有感于“安全生产工作迎来新的春天”.docx

    有感于“安全生产工作迎来新的春天”.docx

    2021当好自己的家,作好自己的主有感于中队委选举前后.docx

    2021当好自己的家,作好自己的主有感于中队委选举前后.docx

    有感于政治学科的教学艺术.doc

    虽然文件标题和描述提及的是“有感于政治学科的教学艺术”,但实际上,文档内容主要探讨的是教学艺术在教育中的重要性和具体功能,而并未特指某一特定学科,如政治。因此,我们将围绕教学艺术这一主题展开讨论。 ...

    初中语文语文论文有感于走进葡萄园……

    在这样的背景下,初中语文论文“有感于《走进葡萄园……》”通过这个故事向我们揭示了教育方法与教育效果之间的深刻联系,引发我们对于教育工作的深层次反思。 故事中的葡萄园老妇人采用了一种独特的销售方式——让...

    socket通信服務端

    最近寫的一個socket通信程序,供大家免費下載,有感興趣的朋友可以交流交流。

    有感于SP++1

    作者在本科和研究生阶段积累了对信号处理的理解,希望能将这些算法用C++实现,从而诞生了SP++。2009年,作者在面临复杂算法转换为C语言时,发现缺少国内开发者贡献的类似库,这激发了他创建SP++的决心。经过两年半的...

    dbforge mysql 7.2.58破解版[有感于别人高昂的下载分]

    dbForge Studio for MySQL 7.2.58破解版,报病毒是因为破解文件的问题导致,实际上没毒。有感于别人高昂的下载分,本来想设置成免费的,结果最低也得设置成2分

    有感于《路边拾遗》-路边拾遗是什么意思.docx

    ### 有感于《路边拾遗》:摄影与心灵之旅 #### 一、摄影的意义与价值 《路边拾遗》是一本由两位非职业摄影师创作的摄影画册,书中不仅收录了他们拍摄的精美照片,更重要的是传达了作者对摄影艺术的理解与感悟。...

    有感于《犹太妈妈培养富豪手记》 .docx

    ### 有感于《犹太妈妈培养富豪手记》关键知识点提炼 #### 一、父母之爱的本质 - **以分离为目的的爱**:书中强调父母的爱与其他类型的爱不同,它以帮助孩子成长为独立个体为目标,即最终实现与父母的情感“分离”。...

    张辉-布道师-《关于实践——有感于大学计算机教育》

    文章《关于实践——有感于大学计算机教育》由张辉撰写,这位布道师在文中探讨了大学计算机教育的现状以及对学习实践的重视。他指出,随着新技术和语言的不断涌现,许多人在学习过程中感到焦虑。张辉认为,新概念的...

    有感于《城南旧事》.doc

    在IT领域,我们看到了技术与艺术的交融,如电影特效、游戏设计等,都在探索如何用技术手段增强艺术表现力。 5. 用户体验设计:书中提到的“不疾不徐,温厚淳和”的风格,对于用户体验设计有所启示。好的产品设计应...

    socket通信

    最近寫了一個socket通信程序,供大家免費下載,有感興趣的朋友可以交流交流

Global site tag (gtag.js) - Google Analytics