# java201904022 **Repository Path**: GUOSD/java201904021 ## Basic Information - **Project Name**: java201904022 - **Description**: 多线程 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java201904021 #### 介绍 多线程 #### 软件架构 软件架构说明 #### 安装教程 1.生产者消费者多线程编程 1.1 线程同步与线程通信 线程同步使用Synchronized关键字; 线程通信使用wait-notify机制;(参考图:教材P240页) Synchronized关键字语法: 1.2 生产者消费者问题 问题描述: 有一个生产者的线程和一个消费者的线程,生产者负责生产产品,消费者负责消费产品,生产者和消费者通过仓库进行交互; 业务流程: 生产者生产产品放入仓库; 消费者从仓库取出产品进行消费; 问题分析: 生产者生产完产品放入仓库时,可能仓库满,造成无法放入仓库的问题; 消费者消费产品时,可能仓库为空,造成不能消费的问题; 问题解决: 线程同步,生产者和消费者同步访问仓库; 线程通信: 当仓库满时,生产者通知消费者进行消费,同时生产者停止生产,进入等待队列; 当仓库空时,消费者通知生产者进行生产,同时消费者挺是消费,进入等待队列; 当仓库满时,消费者接到生产者的通知时,进入仓库消费产品; 当仓库空时,生产者接到消费者的通知时,生产产品放入仓库; 编程分析: 仓库使用栈来表示,表示产品是先进后出; 通过线程同步,生产者和消费者同步访问仓库; 通过线程通信机制,进行线程同步通信; 1.3 synchronized关键字和wait-notify通信机制 wait-notify多线程之间的通信,要求必须占有对象锁,也就是,wait-notify必须写在synchronized方法或语句块中; synchronized关键字用法: 可以修饰方法,作为同步方法使用; 可以修饰语句块,对该语句块进行同步处理; 修饰语句块语法: synchronized (被加锁对象){ 被同步的语句块; } 注意: synchronized关键字被加锁对象必须是对象类型;(基本类型使用包装类类型替代) synchronized加锁对象时引起多线程死锁的关键资源对象; 使用synchronized关键字进行同步时,主要考虑被加锁的对象,以及被加锁对象的粒度大小; 被加锁对象的粒度越小越好,因为同步处理是需要系统开销的; ★★★★★ 日后扩展内容 因为synchronized是对整个对象加锁才能实现线程同步,所以是悲观锁; cas无锁化处理的多线程安全是乐观锁; ★★★★★ 2.多线程并发 扩展:java.util.concurrent包中的集合类的使用; 重点扩展:java.util.concurrent.ConcurrentHashMap类,深入源码级别的; 注意: 与普通HashMap的对比; cas无锁化处理(乐观锁)【对比,synchronized悲观锁】 以及多线程下的容量的扩展 3.网络编程 3.1 计算机网络基础知识 OSI的7层模型、Tcp/Ip4层模型、 各层之间的关系,各种中的网络协议、常用的网络协议、 ip地址划分、子网掩码计算 tcp三次握手建立连接、四次握手释放连接、 udp协议 tcp和udp协议的异同点; mac地址和ip地址的异同点以及作用; 端口号的概念; 端口号是一台逻辑主机用于对不同程序之间进行通信时进行区分的端口,就是端口号,一般进场通过ip+端口号的方式用于隔离同一个ip地址下多个程序之间的通信; 1-1024 是系统级别使用的端口号,用户自定义端口号要从1024以后开始定义; #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)