NIO的简单Demo
package jesse.test1; import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Set; public class NIOServer extends Thread{ @Override
public void run(){
try {
// 1,创建Selector 和 Channel
Selector selector = Selector.open();
ServerSocketChannel serverSocket = ServerSocketChannel.open();
//
serverSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 8888));
serverSocket.configureBlocking(false);
// 注册到Selector,并说明关注点
serverSocket.register(selector, SelectionKey.OP_ACCEPT);
while(true){
//阻塞等待就绪的Channel
selector.select();
Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> iter = selectedKeys.iterator();
while(iter.hasNext()){
SelectionKey key = iter.next();
// 生产中一般会额外进行就绪状态检查
sayHelloWorld((ServerSocketChannel) key.channel());
iter.remove();
}
} } catch (IOException e) {
e.printStackTrace();
}
} private void sayHelloWorld(ServerSocketChannel server){
try {
SocketChannel client = server.accept();
client.write(Charset.defaultCharset().encode("hello World."));
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
/*NIOServer server = new NIOServer();
server.start();
try {
Socket client = new Socket(InetAddress.getLocalHost(), 8888);
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println(bufferReader.readLine()); } catch (IOException e) {
e.printStackTrace();
}*/
System.out.println("hello world");
ThreadGroup group = Thread.currentThread().getThreadGroup();
ThreadGroup topGroup = group;
while (group != null) {
topGroup = group;
group = group.getParent();
}
int nowThreads = topGroup.activeCount();
Thread[] lstThreads = new Thread[nowThreads];
topGroup.enumerate(lstThreads);
for (int i = 0; i < nowThreads; i++) {
System.out.println("线程number:" + i + " = " + lstThreads[i].getName());
} }
}
/**
* 1、通过Selector.open 创建Selector,类似调度员
* 2、创建一个ServerSocketChannel,并且注册到Selector上,指定SelectionKey.OP_ACCEPT,接收新的连接请求
* 3、Selector阻塞在select请求,当有Channel发生接入请求,会被唤醒
* 4、通过SocketChannel和Buffer进行数据操作,
*/
NIO的简单Demo的更多相关文章
- 知识点整理-bio、nio的简单demo
BIO package com.io.bio; import java.io.IOException; import java.io.InputStream; import java.net.Serv ...
- 设计模式之单例模式的简单demo
/* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...
- Spring的简单demo
---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...
- 使用Spring缓存的简单Demo
使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...
- Managed DirectX中的DirectShow应用(简单Demo及源码)
阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...
- angular实现了一个简单demo,angular-weibo-favorites
前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- 二维码简单Demo
二维码简单Demo 一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&qu ...
- android JNI 简单demo(2)它JNI demo 写
android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...
随机推荐
- python 实用命令
列表理解: list = [-1, -2, 1, 2] [item for item in list if item > 0] [1, 2] d = {'person': 2, 'cat': 4 ...
- AC日记——贪婪大陆 洛谷 P2184
贪婪大陆 思路: 树状数组: 跪烂.. 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int ...
- 最短路-Floyd
简介: 算法的特点: 弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭 包. 算法思想: 通过F ...
- 【解决】win7 64 pip安装scrapy出错
问题一:microsoft visual c++ 9.0 is required 参考:http://www.cnblogs.com/ldm1989/p/4210743.html 问题二:ERROR: ...
- POJ 1062 昂贵的聘礼 【带限制的最短路/建模】
年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说:" ...
- Luogu P3258 松鼠的新家(树链剖分+线段树/树状数组)
题面 题解 这种题目一看就是重链剖分裸题,还是区间修改,单点查询,查询之前在遍历时要记一个\(delta\),因为这一次的起点就是上一次的终点,不需要放糖,所以可以用\(BIT\)来写,但我写完\(m ...
- 洛谷——P2908 [USACO08OPEN]文字的力量Word Power
P2908 [USACO08OPEN]文字的力量Word Power 题目描述 Farmer John wants to evaluate the quality of the names of hi ...
- SCU 4444 Travel (补图最短路)
Travel The country frog lives in has \(n\) towns which are conveniently numbered by \(1, 2, \dots, n ...
- ZOJ 3057 Beans Game 博弈论 sg函数
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3057 典型的sg函数,数据范围卡得真好啊 代码 #include<c ...
- bzoj 4506: [Usaco2016 Jan]Fort Moo
4506: [Usaco2016 Jan]Fort Moo Description Bessie is building a fort with her friend Elsie. Like any ...