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的更多相关文章

  1. 知识点整理-bio、nio的简单demo

    BIO package com.io.bio; import java.io.IOException; import java.io.InputStream; import java.net.Serv ...

  2. 设计模式之单例模式的简单demo

    /* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...

  3. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

  4. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  5. Managed DirectX中的DirectShow应用(简单Demo及源码)

    阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...

  6. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  7. Solr配置与简单Demo[转]

    Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...

  8. 二维码简单Demo

    二维码简单Demo 一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&qu ...

  9. android JNI 简单demo(2)它JNI demo 写

    android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...

随机推荐

  1. Balanced Binary Tree——经典题

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  2. Go语言标准包之用io包模拟curl

    最后一个书上的标准包,但真正学习的路才开始... package main import ( "bytes" "fmt" "os" &quo ...

  3. Linux下几个命令的技巧

    Ctrl的组合键+a,移动到一行命令的首部+e,移动到一行命令的尾部+左右键,以单词为单位左右移动+u,删除光标之前的所有内容+k,删除光标之后的所有内容Alt+.为引用上一个命令的最后一个参数 还有 ...

  4. 四十六 常用内建模块 itertools

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...

  5. Qt应用如何发布

    原文请看:http://www.cnblogs.com/ungshow/archive/2010/10/10/1847082.html 通常情况下,使用Qt开发应用都是采用动态编译的方式来进行发布,发 ...

  6. Codeforces 1099 D. Sum in the tree-构造最小点权和有根树 贪心+DFS(Codeforces Round #530 (Div. 2))

    D. Sum in the tree time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. 读书笔记(javascript 高级程序设计)

    一. 数据类型: 1. undefined: 未声明和未初始化的变量,typeof 操作符返回的结果都是 undefined:(建议未初始化的变量进行显式赋值,这样当 typeof 返回 undefi ...

  8. 【tomcat】tomcat远程调试

    修改tomcat bin目录下的catalina.sh,增加下面这行: CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=9 ...

  9. leetcode104 Maximum Depth

    题意:二叉树最大深度 思路:递归,但是不知道怎么回事直接在return里面计算总是报超时,用俩变量就可以A···奇怪,没想通 代码: int maxDepth(TreeNode* root) { if ...

  10. [BZOJ4013][HNOI2015]实验比较(树形DP)

    4013: [HNOI2015]实验比较 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 756  Solved: 394[Submit][Status] ...