Java并发编程与Netty网络通信实践学习笔记

需积分: 5 0 下载量 2 浏览量 更新于2024-12-28 收藏 104KB ZIP 举报
资源摘要信息:"ConcurrentStudy项目是关于Java并发编程和Netty网络通信的学习和实践资源。项目内容包括了并发编程的学习笔记、代码示例以及Netty的学习资源,其中并发编程的笔记来自于b站上不同up主提供的免费视频教程。项目采用模块化结构,包含了黑马并发编程模块,该模块进一步分为多个子模块,每个子模块对应了并发编程的不同主题章节。代码和笔记的整理工作由个人完成,旨在深化理解并发编程和Netty的原理,并提供参考和讨论的空间。" 知识点: 1. Java并发编程:Java中的并发编程是指能够同时执行多个任务的技术,以便充分利用多核CPU的处理能力。它涉及到多线程编程、线程安全、进程间通信等概念。Java并发编程的学习重点包括理解线程的生命周期、创建和管理线程的多种方式、线程同步机制(如锁、同步块、wait/notify等)、以及并发工具类(如ExecutorService、CountDownLatch、CyclicBarrier等)的使用。 2. Netty网络通信:Netty是一个高性能的异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty的学习重点包括了解其基本架构、核心组件(如Channel、ChannelHandler、EventLoop等)、Netty的使用流程(初始化、Channel的注册、数据的读写等),以及Netty提供的各种编码器和解码器,用于处理不同协议的数据。 3. 项目结构和模块化:项目采用模块化结构,允许开发者将复杂的应用程序分解为多个独立的、可管理的模块。这种结构有助于代码的复用、维护和扩展。ConcurrentStudy项目中的模块化设计,通过各个子模块的划分,使得学习资源组织得更加清晰,方便学习者按章节逐步学习和实践。 4. 视频学习资源:项目中的学习资源来源于网络上的免费视频教程,主要来自于b站上的不同up主。这表明目前网上有丰富的免费资源可供学习,这些资源对于初学者来说非常有用,因为视频通常更加直观且易于理解。同时,项目还提供了笔记的快速链接,方便学习者快速定位学习内容。 5. 代码实践与开源:项目鼓励学习者通过实践来加深理解,并将编写的代码进行开源。通过上传和分享代码,学习者可以获得来自社区的反馈和帮助,从而进一步提高编程能力。同时,开源代码也为其他学习者提供了参考和学习的资料。 6. 错误纠正和社区互动:项目欢迎学习者在发现错误时提出纠正意见,这反映了开源项目的一个重要特点——社区互助。在社区的帮助下,学习者不仅可以修正错误,还能从他人的问题和解答中学习到更多知识。 7. 语雀笔记整理:语雀是一个文档协作工具,支持笔记的编辑和分享。项目中提到的笔记保存在语雀中,并且是基于老师笔记和个人的理解进行二次整理。这表明学习者在学习过程中不仅需要吸收知识,还需要通过整理笔记的方式对知识进行内化和整理,形成自己的知识体系。
2023-06-12 上传

2023-07-14 15:19:01.215 WARN 7308 --- [sson-netty-2-15] io.netty.util.concurrent.DefaultPromise : An exception was thrown by org.redisson.misc.RedissonPromise$$Lambda$888/0x00000008008f7440.operationComplete() java.lang.NullPointerException: null 2023-07-14 15:19:01.216 ERROR 7308 --- [sson-netty-2-15] o.r.c.SentinelConnectionManager : Can't execute SENTINEL commands on /172.24.107.11:26379 org.redisson.client.RedisException: ERR No such master with that name. channel: [id: 0x2d66827d, L:/172.23.9.103:46812 - R:/172.24.107.11:26379] command: (SENTINEL SLAVES), params: [mymaster] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:365) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104) ~[redisson-3.13.3.jar:3.13.3] at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 解决方法

2023-07-15 上传