`
dylan0514sina.cn
  • 浏览: 94921 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Nio线程协作

 
阅读更多
Netty 是一个客户端服务器框架,它基于jdk nio开发。Netty home.
Netty 样例代码如下
客户端
     // Configure the client.
        ClientBootstrap bootstrap = new ClientBootstrap(
                new NioClientSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));

        // Set up the pipeline factory.
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(
                        new EchoClientHandler(firstMessageSize));
            }
        });

        // Start the connection attempt.
        ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
        // Wait until the connection is closed or the connection attempt fails.
        future.getChannel().getCloseFuture().awaitUninterruptibly();

        // Shut down thread pools to exit.
        bootstrap.releaseExternalResources();

服务器端
  // Configure the server.
        ServerBootstrap bootstrap = new ServerBootstrap(
                new NioServerSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));

        // Set up the pipeline factory.
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(new EchoServerHandler());
            }
        });

        // Bind and start to accept incoming connections.
        bootstrap.bind(new InetSocketAddress(port));
    }

处理流程

NioClientSocketPipelinesink由NioClientSocketChannelFactory创建,责任是分发事件处理
AbstractNioSelector是netty心脏,下面是客户端的AbstractNioSelector实现,包括NioClientBoss,NioWorker,没有画出的部分是服务器端的NioServerBoss,他们的职责及其区别如下流程

NioClientBoss,NioServerBoss,NioWorker联系与区别如下。
如上所述NioClientSocketPipelinesink和NioServerSocketPipelinesink分别处理客户端服务器端的由Boostrap触发的事件,有本事身为AbstractNioSelector的Boss线程NioClientBoss,NioServerBoss处理,NioClientBoss处理OP_CONNECT,NioServer处理OP_ACCEPT。
NioClientBoss完成连接后,交由NioWorker线程处理;NioWorker在连接之前已经创建
NioServerBoss接受到多个连接后,交由NioWorker线程处理;NioWorker在接受到连接后创建。递交给NioWorker的方式通过注册到NioWorker任务队列中,当有后续的交互操作时NioWorker会处理任务队列

0
0
分享到:
评论

相关推荐

    基于JAVA IO, NIO, Netty, 多线程并发实战源码.zip

    5. 高级并发技术的应用,如线程间的协作和通信(如Future、Callable、CyclicBarrier等)。 通过深入研究这些源码,开发者可以提升自己在Java I/O、NIO、Netty以及多线程并发编程方面的技能,这对于开发高效、稳定的...

    java nio入门学习,两个pdf

    4. **多线程协作**:NIO的非阻塞特性使得多线程协作更加容易,减少线程间的上下文切换,提高整体性能。 总之,Java NIO是Java平台中的重要组成部分,它提供了不同于传统I/O的另一种选择,尤其适用于需要处理大量...

    java快递柜多线程+网络编程

    3. **NIO(非阻塞I/O)**:`java.nio`包提供了非阻塞I/O支持,允许单个线程处理多个连接,提高了性能。`Selector`和`Channel`是NIO的核心组件。 4. **HTTP协议**:Java的`HttpURLConnection`类可以方便地实现HTTP...

    IO和线程java输入输出 多线程

    wait()、notify()和notifyAll()方法用于线程间的协作,但必须在同步环境中使用。另外,java.util.concurrent包提供了Semaphore、CyclicBarrier和CountDownLatch等高级同步工具,以满足更复杂的并发需求。 IO和线程...

    java实现多线程下载文件

    3. **多线程协作** - **同步机制**:为了保证文件下载后的完整性,需要使用Java的同步机制,如`synchronized`关键字、`Lock`接口等,确保线程间对同一资源的访问是有序的。 - **信号量(Semaphore)**:当某一线程...

    实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒)

    - 为了实现线程间的协作,通常会用到同步机制,如互斥量(Mutex)、信号量(Semaphore)、条件变量(Condition Variable)、事件对象(Event)等。 - 在这里,发送消息线程可能使用条件变量或其他同步机制来唤醒...

    Java多线程下载器

    线程间的协作可以通过同步机制来确保数据的一致性。 2. **并发控制**:在多线程下载中,我们需要管理这些线程,防止它们相互干扰。Java提供了多种并发控制机制,如synchronized关键字、Lock接口(如ReentrantLock)...

    juc_nio_linux.rar

    在实际开发中,了解如何在Java的并发编程库(JUC)与NIO机制之间进行协作,可以帮助构建更高效、可扩展的服务。例如,使用线程池来管理执行NIO操作的任务,或者结合CountDownLatch等同步工具来协调多线程间的交互。...

    java 资源搜索并下载(线程等待和通报)

    在多线程环境下,线程等待和通报是控制线程间协作的重要手段。Java的`java.util.concurrent.locks.Condition`接口提供了这一功能。线程可以通过`await()`方法进入等待状态,直到收到`signal()`或`signalAll()`通知后...

    多线程网络文件传输的设计与实现

    在提供的源代码中,我们可以深入研究这些技术是如何具体实现的,包括线程间的协作、网络通信的细节、文件处理的逻辑等。通过阅读和理解代码,我们可以学习到实际开发中的最佳实践,并提升我们的多线程网络编程能力。

    java线程,网络,协议

    线程可以共享内存空间,这使得它们能够有效地协作,但也可能导致竞态条件和死锁等问题。为了避免这些问题,Java提供了同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及更高级的并发工具,...

    android开发进阶之NIO非阻塞包

    1. **降低线程使用量**:由于NIO采用了非阻塞的方式,可以减少线程的创建和销毁次数,从而降低了线程切换和同步的成本,尤其是在处理大量并发连接时表现更为明显。 2. **提高系统资源利用率**:NIO减少了因阻塞而...

    java面试题_多线程(68题)

    47. **线程安全的I/O**:NIO中的通道、缓冲区、选择器等特性,以及在多线程环境下的使用。 48. **线程安全的网络编程**:如`ServerSocket`、`Socket`的使用,以及并发客户端处理。 49. **线程安全的数据库连接池**...

    多线程小项目源代码(Java)

    3. **线程通信与协作**:`wait()`, `notify()` 和 `notifyAll()` 是Object类的方法,用于线程间的通信。还有`BlockingQueue`等高级并发工具,可以实现线程间的协作和数据传递。 4. **线程状态**:Java线程有五种...

    Java多线程读取大文件

    总之,Java多线程读取大文件是通过文件分区、内存文件映射和NIO技术来提升效率,同时通过多线程协作和合理的资源管理确保程序的稳定性和性能。这种策略尤其适用于需要高效处理大量数据的场景,如日志分析、数据导入...

    Java多线程机制及其在socket编程中的应用.pdf

    4. 线程通信:wait()、notify()和notifyAll()方法用于线程之间的协作,它们属于Object类的一部分。 5. 线程池:通过使用Executor框架,可以管理线程池中的线程生命周期,并且可以方便地执行提交给线程池的任务。 6...

    基于Java的多线程数据通信程序设计.zip

    3. **数据通信**:在多线程程序中,数据通信通常涉及到线程间的协作。Java提供了多种方式实现这一点,如使用`BlockingQueue`进行线程间的数据传递,或通过`ThreadLocal`存储每个线程的局部变量,避免了共享状态的...

    java多线程下载器小程序

    - `wait()`, `notify()`和`notifyAll()`方法:在同步控制下,线程间的通信和协作。 - `ReentrantLock`:可重入锁,提供更细粒度的锁控制,具有与`synchronized`相似的功能,但更灵活。 3. **文件操作**: - `...

    Java NIO中四大核心组件的使用详解.rar

    这四个组件相互协作,构建了一个高效、灵活的I/O模型。 1. **通道(Channel)**:通道是数据传输的管道,可以将数据从一个位置传输到另一个位置。Java NIO提供了多种类型的通道,如文件通道(FileChannel)、套接字...

    JAVA SWING 多线程扫描局域网IP及端口 v2 源码

    此外,版本控制(如Git)对于协作开发和代码维护也十分重要,它可以追踪代码的修改历史,方便团队成员协作。 8. **性能优化**:为了提高扫描效率,可能会采用异步IO(NIO)或者并发集合(如ConcurrentHashMap)来...

Global site tag (gtag.js) - Google Analytics