- 博客(458)
- 资源 (2)
- 收藏
- 关注
原创 解密电商系统-Spring boot快速开始及核心功能介绍(下)
上次说了Spring boot快速开始及核心功能介绍,本次说说配置文件相关的。Spring Boot属性配置文件详解(一)修改端口# application.properties:server.port=8888 另外,也可以直接在运行jar包的时候修改java -jar xx.jar --server.port=8888自定义属性及获取场景:应用中需要读取配置文件application.properties中[文件改成UTF-8]teacher.id=1.
2021-12-13 11:32:11
354
原创 软件架构-Spring boot快速开始及核心功能介绍(中)
上次通过Spring boot认知,核心功能。springBoot的搭建【官方向导搭建boot应用】和 【maven的方式搭建boot】。统一父POM管理(一)① 建立boot-parent工程首先我们建立一个 boot-parent的maven工程删除src目录然后修改pom.xml。packaging改为为pom格式。<packaging>pom</packaging>加入dependencyManagement, 同时去掉vers.
2021-12-06 15:27:25
520
原创 软件架构-Spring boot快速开始及核心功能介绍(上)
今天一起说说微服务,之前写docker多服务部署的时候也说微服务,一起说说Spring boot快速开始及核心功能介绍。(一)Spring boot认知,核心功能一般的框架出现主要是为了解决问题的。微服务和springboot出现,是一个非常重大的更新,spring已经没落了很久的(也可以说整个java),自从springboot出现spring二次发育第二春。吐糟:java开发起来非常的笨重,没有动态语言go,python,nodejs轻。每次搞java的spring配置一坨一坨的,用技术也需.
2021-11-29 15:45:38
468
原创 解密电商系统-读写分离各种实现优缺点与解决方案
数据库读写分离,之前也说过这次在回顾下吧:主从复制,proxy读写分离,jar包进行读写分离。三种方式体量不同,根据自己的需求找到最合适的,一起说下。什么是读写分离(一)我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。而我们对数据库一般分为: master(主库也是写库) slave(从库也为读库)而读写分离的意思就是:所有的写(insert update delete)操作走主库、其他走从库。① 目的是什么?我们一般应用对数据库而言都是“读多写少”,也就是说.
2021-11-22 10:19:35
260
原创 软件架构-解密电商系统-互联网BAT商品详情缓存架构
上几节说了中小型电商公司,项目详情页的优化方案,一般是使用freemark模板生成了html静态页面,放到nginx或者tomcat中,但是肯定选择nginx的并发是tomcat的100倍,通过mq的方式刷新缓存生成新的html静态页面。一起看下大型互联网关于商品详情的架构。(一)讲解上图的的详细信息这些架构是根据业务多年演变而来的,可不是最终就是这样的。机器的内存有上限的话,并发量也是有上限的,一台redis可以存储100g,你水平扩展100台其实还是100g,必须 通过分片的方式这样就是10.
2021-11-08 09:54:04
179
原创 软件架构-解密电商系统-页面静态化
秒杀系统说了几次了,基本技术点都有所涉及。真正的要解决大流量分布式系统的时候,不是特别容易,就像CAP原则和BASE原则,没有最优的方案,只有最合适的。页面静态化(一)① 技术方案通过程序将动态页面抓取并保存为静态页面,这样的页面的实际存在于服务器的硬盘中通过WEB服务器的 URL Rewrite的方式,它的原理是通过web服务器内部模块按一定规则将外部的URL请求转化为内部的文件地址,一句话来说就是把外部请求的静态地址转化为实际的动态页面地址,而静态页面实际是不存在的。这两种方法都达到.
2021-11-01 09:22:27
249
原创 软件架构-解密电商系统-秒杀安全优化与限流防刷
本次主要说说秒杀系统安全相关的优化,比方说秒杀系统的地址如何的隐藏,不让别人刷我的秒杀下单的接口,加验证码,接口做一个限流。本次要说的重点。(一)极端优化极端情况下, 用户已经下单成功,但还没有在缓存中插入,这时库存已经为了0,返回给用户已经抢完了,但是实际上用户已经下单成功了,在订单列表中,可以看到。时间差的问题。解决方案:如果通过redis接口的检验后,放入异步消息队列中,也就是基本放入消息队列的情况下,不出意外都可以可以下单的。后端队列慢慢处理。在加入队列增加一个排队的标记miaos.
2021-10-25 11:22:43
272
原创 解密电商系统-秒杀消息队列异步下单
上几次主要说了高并发大流量项目所涉及到的技术点和技术方案,调优需要注意的一些参数,秒杀订单接口缓存的概念,通过redis的方式,redis需要进行原子性。秒杀优化(一)使用缓存可以大大的提高我们系统的性能,但是需要考虑到周全,可能带来数据的不一致性,所以要根据业务的场景和业务的逻辑,良好的维护它,如果漏了就会产生服务的不一致。产生线上的bug。① 地址信息正常的下秒杀单子的时候,需要先维护好地址信息,下单的时候需要提供对应的地址信息。也可以将这些地址信息添加到redis中,当用户登录.
2021-10-18 10:23:38
503
原创 软件架构-解密电商系统-秒杀下单
之前说了几个高并发的优化点,以及通过一个插件完成session的分布式共享。这次主要说说关于秒杀下单需要注意哪些。秒杀下单需要注意点(一)是否登录session是否存在。收货地址是否填写商品是否存在库存是否够有效期判断库存的数据修改修改redis,一定要使用redis的原子性操作,不要使用set,使用decr。让并发变成线性化操作,变成队列来进行操作。分布式事务(二)首先先说分布式事务是个很复杂的问题,但是解决方案也很多,能不用分布式尽量不用,如果并发量不是那么大的情况下。.
2021-10-11 11:31:59
199
原创 软件架构-解密电商系统-分布式session
上次主要界面介绍了秒杀系统,分析了秒杀系统可能存在的几个性能瓶颈的地方:商品列表,详情页面,提交订单页面。这次主要说说分布式session的问题。(一)秒杀增加高并发的方式1.加入redis缓存的方式,判断是否redis中存在?第一次从数据库里面取,放入redis中,第二次的时候直接从redis里面取。明显并发可以上去。吞吐量也可以明显提高。如果商品价格发生变化,及时的维护redis中的缓存。2.nginx的并发数,加大nginx的并发数。增加work_rlimit_nofile和worker.
2021-10-05 19:06:26
170
原创 软件架构-解密电商系统-秒杀前言
说秒杀系统其实更多的高级一点的知识,不会太多的在业务上说明秒杀,那样确实太浪费时间,主要核心的点,如何处理高并发系统调优,压测。发现性能的瓶颈更好的调优。还会说说高阶的优化。主要分享给大家针对互联网分布式的高并发项目怎么去调优,快速定位,快速解决。主要说思路,明白了思路,如何去快速定位,快速解决。常用的调优方案。秒杀系统介绍(一)其实大家都经常在网上购物的,秒杀应该都知道套路吧。① 所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。② 特点.
2021-09-27 10:40:49
154
原创 软件架构-解密电商系统-交易分库分表
订单相关表都已经是超大表,最大表的数据量已经是几十亿,数据库处理能力已经到了极限;单库包含多个超大表,占用的硬盘空间已经接近了服务器的硬盘极限,很快将无空间可用;过度解决:我们可以考虑到最直接的方式是增加大容量硬盘,或者对IO有更高要求,还可以考虑增加SSD硬盘来解决容量的问题。此方法无法解决单表数据量问题。可以对数据表历史数据进行归档,但也需要频繁进行归档操作,而且不能解决性能问题硬件上(大小)、单表容量(性能)。(一)如何优化?有什么方式数据库的读写分离数据库量还是很庞大,只是读和写数.
2021-09-20 11:29:19
261
原创 软件架构-解密电商系统-订单交易业务
很多人都在淘宝购买过东西,基本得流程都是一致的。(一)订单购物车例如:jd分为自营和多家店铺的,它的购物车比较复杂些。购物车如果保存在session中的话,用户量比较大的情况下,tomcat承受不住。比较合理的方式是保存在redis中,来一起说下redis保存的数据格式。针对购物车结构CartGroup(一个店铺一个CartGroup)CartPkg(一个订单就是一个包裹)一个订单里面就是一个List购物车分两种,登录前购物车和登录后购物车登录前是通过redis.
2021-09-13 23:10:32
220
原创 解密电商系统-订单交易业务
很多人都在淘宝购买过东西,基本得流程都是一致的。(一)订单购物车例如:jd分为自营和多家店铺的,它的购物车比较复杂些。购物车如果保存在session中的话,用户量比较大的情况下,tomcat承受不住。比较合理的方式是保存在redis中,来一起说下redis保存的数据格式。针对购物车结构CartGroup(一个店铺一个CartGroup)CartPkg(一个订单就是一个包裹)一个订单里面就是一个List购物车分两种,登录前购物车和登录后购物车登录前是通过redis.
2021-09-06 14:59:01
322
原创 软件架构-解密电商系统营销-会员模块业务
很多人都在淘宝购买过东西,基本得流程都是一致的。(一)订单购物车例如:jd分为自营和多家店铺的,它的购物车比较复杂些。购物车如果保存在session中的话,用户量比较大的情况下,tomcat承受不住。比较合理的方式是保存在redis中,来一起说下redis保存的数据格式。针对购物车结构CartGroup(一个店铺一个CartGroup)CartPkg(一个订单就是一个包裹)一个订单里面就是一个List购物车分两种,登录前购物车和登录后购物车登录前是通过redis.
2021-08-30 11:19:55
225
原创 软件架构-解密电商系统营销-会员模块业务
上次说了商品,商品分类,品牌,分类的属性,规格。很多电商网站例如:京东,国美,苏宁他们的商品都是存储在redis中的,通过请求获取到的redis进行js的渲染动态的展示商品的信息。(一)营销模块营销工具营销活动商品的ID,营销工具的ID,营销工具的编号,营销工具的类型(商品级别的,订单级别的,全站级别的),渠道(PC端的,IOS端的,android端的)营销活动对应的订单数据针对营销活动产生的订单营销技术方案1个用户或者一个商品对应1-3个营销活动,1.
2021-08-23 09:10:16
685
原创 软件架构-解密电商系统商品模块业务
本身在电商系统就非常的复杂,他们里面的表也相对来说扩展性都很强,关于里面的表设计有很多需要推敲学习的地方,这里我们一起从最复杂的商品模块着手,一起了解下商品模块业务的设计。电商平台上涉及到非常多的产品,这些产品五花八门,从书到电器,从衣服到家具,等等等等,书有出版社,衣服有颜色,手机有容量,属性根据产品的不同也差别极大,对于我们而言又需要如何去抽象这些概念,如何去设计数据库?(一)目的熟悉电商商品模块。京东公司商品模块如何设计的(技术方式)。dubbo的一个bug。(二)电商商品模块.
2021-08-16 10:35:53
450
原创 软件架构-redis特性和集群特性(下)
tomcat生产环境得应用配置,这次的对各位老铁还是非常有用的。其实就是咱们生产环境实际要做的一些事情,有老铁联系我说,从之前说的docker还有现在很多部署基本都是跟运维关系很大,跟开发关系很少啊?其实老铁你误解我了,我的思路就是不管是在应用的环境,最后的部署希望的是各位老铁都能完全的熟悉。Tomcat启动和部署方式(一)以真实的项目为例,告诉大家如何去设置项目的部署。#####现状目前慢慢的jeakins 和 devops的普及越多越多的公司开始自动的部署。但是还有很多公司停留在:增.
2021-08-09 09:35:45
174
原创 软件架构-redis特性和集群特性(中)
上次说了redis的命令,这次说说redis的集群相关的知识。(一)复制通常为被复制方(master)主动将数据发送到复制方(slave),复制方接收到数据存储在当前实例,最终目的是为了保证双方的数据一致,同时也是降低了master的压力。复制方式主(master)-从(slave)模式从(slave)-从(slave)主从复制的流程图slave向master发送sync命令。master开启子进程执行bgsave写入rdb文件,同时将子进程接收到的写命令.
2021-08-02 10:36:36
97
原创 软件架构-redis特性和集群特性(上)
上次已经说到了redis其实就是nosql,这次具体redis是个什么样的东西。(一)Redis安装通过虚拟机的方式在centos7下面安装下,这次我不通过docker的方式了,按照正常的方式,让老铁们熟悉redis的结构。mkdir softcd soft#虽然这个不是最新版本,但是这个版本已经够了解了。#我一直说不要使用最新版本的,#如果新版本没有太多建设性的改变,#因为新版本资料少,出问题不好解决。wget http://download.redis.io/releases.
2021-07-26 10:43:51
93
原创 软件架构-Nosql之redis
主要从0到1熟悉redis,之前也简单的介绍过redis,但是根本不够深入,这次深入的一起解析下这个redis。(一)关系型数据库&nosql区别nosql:Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。关系型数据:就是咱们可以通过标准的sql,进行查询的一种数据库。复杂的查询在传统的关系型数据库中查询一个复杂的业务需要写很复杂的 sql 语句。很多传统行业(电信,移动,联通,电力,银行)都是通过存储过程来控制的,一个存储过程比.
2021-07-19 09:48:17
250
原创 软件架构-Dubbo调用模块
之前说了RPC协议,RPC传输,终于到调用这块了,一步步走过来看的头都炸了,太艰辛了,上次主要说的就是线程之间的协作,业务线程池,IO线程池,重连线程池,心跳发送的线程池,调用重试的线程池。每个连接都有2个守护线程(心跳连接,重连接检测)。线程之前的协作:(客户端:调度线程,IO线程,结果Exchange线程)(服务端:IO线程,业务线程)(一)Dubbo调用模块概述dubbo调用模块核心功能是发起一个远程方法的调用并顺利拿到返回结果,其体系组成如下:透明代理:通过动态代理技术,屏蔽远程调.
2021-07-12 14:58:29
120
原创 『互联网架构』软件架构-RPC网络传输原理与实现
回顾下:普通RPC框架需要做的:服务的注册,发现,暴露。服务注册包括:调用模块(负载均衡,容错,透明)。RPC协议包括(序列化,编码,传输),其实透明化的远程调用。RPC报文的格式:请求行,请求头和请求体。RPC协议相比HTTP要更加精简,传输的量要更少。今天主要说说传输这块,其实也是最复杂的,说这个意义,感觉只是使用dubbo,其实对开发者的意义不是很大,大家不需要了解底层的业务传输,但是如果要设计一个消息服务器,这可是一般的开发人员可以搞定的。必须有过一定的经验,参考过别人的一个远程实现。了解了这些对.
2021-07-05 09:33:19
337
1
原创 『互联网架构』软件架构-dubbo协议底层原理与实现
相信通过上三次的文章,基本都了解了dubbo的一些套路,分布式如何做,注册中心,admin怎么玩的。其实对dubbo没有这么深入了解的老铁,也很多会使用dubbo。但是我们仅仅做到使用就完了吗?其实并不是的。我们角度仅仅不能满足使用,深层的意义就是满足底层远离和实现机制。####(一)RPC协议与使用场景在一个典型RPC的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件,其中RPC协议就指明了程序如何进行网络传输和序列化 。也就是说一个RPC协议的实现就等于一个非透明的RPC调用,.
2021-06-28 08:53:06
176
原创 软件架构-企业级dubbo应用(下)
上次说到dubbo有阿里自己的后台管理工具,这里就介绍下阿里这个后台管理工具,dubbo-admin。源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-掌握dubbo常规应用(下)(41)/dubbo-study(一)安装准备这里我还用docker的方式来进行安装,手动来安装的话太麻烦了,直接看官网也有。没有什么技术含量,通过docker的方式更爽。设置dnsvi /etc/resolv.conf .
2021-06-21 10:17:07
174
原创 『互联网架构』软件架构-企业级dubbo应用(下)
Spring在java的生态里面是一个主流的框架,今天一起了解下Spring的基本概念的概述。Spring 概述(一)① 介绍spring 其实就是一个容器,容器可以理解一个map,容器里面包含了bean对象、Core是方法、Context是上下文、SpEL正则匹配的库函数。接触比较多的是Beans和Core。AOP是勉强切面编程的思想,Aspects是切面的意思。DataAccess 主要是一些数据库操作的组件,JMS是java的message。web就是spring mvc这块。.
2021-06-14 17:57:46
128
原创 软件架构-企业级dubbo应用(上)
上次说了dubbo的历史,介绍,了解了cosumber ,proivder,registry 他们之间的调用管理。提供的源码是cosumber 和 proivder 在一个项目里面,在实际的企业开发中他们两者之间都是在不同的项目下的。这次主要说说分布式开发和联调,其实这个坑很大,比技术的坑要大,要深!每次查看生产和消费者 直接这样口头或者文档的形式是不是很low,其实可以搭建dubbo控制台,对于注册中心上次使用了小广播的形式,对于实际生产环境应该选择哪种注册中心这里也会说到。源码:https://g.
2021-06-07 10:07:43
174
1
原创 『互联网架构』软件架构-掌握dubbo常规应用(下)
上一节说的dubbo的架构,流程的说明,设计的意义,其实就是dubbo的helloword。下面重点说说【Dubbo常规配置】。源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-掌握dubbo常规应用(下)(41)/dubbo-study配置分布图红色是cosumber 和 proivder 都需要用到的,cosumber是应用程序,proivder 也是应用程序。不管是提供方和消费方都要提供applicat.
2021-05-31 01:02:16
128
1
原创 软件架构-掌握dubbo常规应用(上)
回顾上次的文章,讲了分布式的历史和发展的背景,通过一个场景一个公司的项目想换成分布式的项目,但是真正的要把一个系统改成成为一个分布式系统的时候,过程并非那么容易,需要整个公司一起来配合,包括业务部门和技术部门,才能把系统做好,其实单体变成分布式的不仅仅是技术发生了改变,公司的运作流程和系统的版本发布,都已经做了改变。如果一个系统要更改成分布式系统,一定要把相关的干系人都召集到一起开个会,评估下。技术人员只需要做到对业务的波动降低到最低,开发成本一定要可控,评估好,不要做成一个烂尾的项目。分布式架构是把双刃.
2021-05-24 15:39:09
181
5
原创 软件架构-从0到1认知分布式架构(下)
上次说了分布式架构的历史,分布式架构需要考虑的问题,这次继续说分布式架构。轻量级架构 会采用 Http+Nginx负载均衡+容错+服务配置+健康检测 这些功能怎么解决呢?一个一个的去编码实现么?。有没有现成的方案可以直接实现这些功能?Nginx完全支持这些功能。所以企业在做轻量级架构 会采用 Http+Nginx 方式。这个架构有什么瓶颈,nginx挂了的话,是不是服务都不行了,可以在中间层可以搞keeplived,做nginx的负载。完成nginx内部的负载,Nginx本身还可以.
2021-05-17 09:23:03
205
3
原创 软件架构-从0到1认知分布式架构(上)
不管之前接触过分布式的没有,有没有分布式的经验,跟着老铁我一起看看熟悉下,绝对收获满满,里面可是有段子啊~####(一)分布式发展的历史和背景场景一家做政府系统OA系统的公司老板,发现跟竞争对手比发现自己的系统的架构不是分布示的,招标的时候不是特别的顺利,就找到技术负责人问,把系统架构升级成分布示架构要多长时间啊?技术负责人网上查了查 dubbo官网,看了看 Demo 这不很简单吗,拍着胸脯一个月能升级好。这位技术经理在改造过程中可能会遇到什么风险和问题?有些老铁有工作经验的在.
2021-05-10 21:00:26
331
2
原创 『互联网架构』软件架构-zookeeper之源码分析和运维总结
今天主要是说源码的分析,客户端启动过程的源码分析和服务端启动过程的源码分析。最后在说说zookeeper的运维和总结。源码:https://github.com/limingios/netFuture/源码/『互联网架构』软件架构-zookeeper之源码分析和运维总结(37)(一)服务的启动过程初始化server1,server2,server3,不知道那个是leader,那个是follower,启动完成选举算法选择出来leader,follower和observer.
2021-05-03 12:03:37
175
2
原创 软件架构-zookeeper之curator详解
为了更好的实现java操作zookeeper服务器,后来出现Curator框架,非常的强大,目前已经是apache的顶级项目,里面提供了更多丰富的操作。例如:session超时重连,主从选举,分布式计数器,分布式锁等适用于各种复杂的zookeeper场景的API封装。源码:https://github.com/limingios/netFuture/源码/『互联网架构』软件架构-zookeeper之curator详解(36)官方源码http://curator.apache.org/这个跟z.
2021-04-27 17:37:30
197
原创 软件架构-zookeeper场景讲解(分布式锁)和zkclient使用
继续开车,其实zookeeper能用到的场景很多,在这里在介绍几个场景,在说下分布式锁,很多了解都想知道分布式锁, 其实分布式锁并不是zk的一个特性,用zk能做的事情太多了。源码:https://github.com/limingios/netFuture/源码/『互联网架构』软件架构-zookeeper场景讲解(分布式锁)和zkclient使用(35)场景分析以前的job场景很多的项目中,都要有job,跑一些定时的任务,每天需要统计下订单量,需要定时发送消息,很多的job。原来的job.
2021-04-19 17:30:56
324
原创 软件架构-zookeeper场景和实现
上次zookeeper的分布式也搭建完毕了,ZNODE,ACL,ZAB协议,Watcher,常用命令的使用,我们现在要怎么使用zookeeper呢?之前可能因为没接触过zookeeper,不知道他能干什么?通过场景来举个例子,zookeeper高可用分布式数据管理与协调框架,能分布式环境数据一致性,基于这样的特性我们来说说哪些场景实现。源码:https://github.com/limingios/netFuture/ 【zookeeper】https://github.com/limingios/.
2021-04-12 09:27:24
154
原创 软件架构-zookeeper快速入门
上次在配置zookeeper分布式的时候,有个很重要的文件zoo.cfg,里面重点配置了几个信息clientPort,server.1的端口号。实际用到了2个端口号2181,2888,还有个2888这是备用的端口号。有人说zk是互联网的基石,一点都不夸张,它的作用很大。源码:https://github.com/limingios/netFuture/ 【zookeeper】[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYEWiIAF-1617634961465)(.
2021-04-05 23:05:40
114
原创 软件架构-zookeeper集群部署与快速入门
目前的公司是使用的阿里内部的dubbo,也就是EDAS,里面用了阿里自己的EDAS服务,如果是使用过dubbo的老铁,应该知道zookeeper,zookeeper在大数据和RPC通信上应用比较管饭。不管用过zookeeper没有,这次主要是介绍下zookeeper和集群的部署。这个必须要实际操作下,才能理解的深刻。源码:https://github.com/limingios/netFuture/ 【zookeeper】(一)介绍zookeeper历史Zookeeper 最早起源于雅.
2021-03-29 03:57:31
346
原创 软件架构-分布式系列并发编程atomic&collections
在java中提供了一种对于原子操作的类,Atomic的包名为java.util.concurrent.atomic。这个包里面提供了一组原子变量的操作类,这些类可以保证在多线程环境下,当某个线程在执行atomic的方法时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个线程执行。AtomicCAS能够弄懂atomic包下这些原子操作类的实现原理,就要先明白什么是CAS操作。1.CAS指的是现代CPU广泛支持的一种对内存中的共享数据进行.
2021-03-22 09:04:28
198
1
原创 软件架构-分布式系列并发编程Lock锁和Tools限制
虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。源码:https://github.com/limingios/netFuture/blob/master/JSR133中文版.pdfsynchronized & VolatileJSR133 http://www.cs.umd.edu/~pugh/java/m.
2021-03-15 16:58:07
232
原创 软件架构-分布式系列并发编程
说说JMM,线程,线程池。一切都为了分布式而行动!JMM理解下面的图java的文件,需要进行编译,通过java编译编程class文件,class文件变成字节码,装载到类装载器中,通过类装载器进行执行,执行的过程中的一个模型就是下面这个图。特性1.可见性可见性是指当一个线程修改了共享变量后,其他线程能够立即得知这个修改。通过之前对synchronzed内存语义进行了分析,当线程获取锁时会从主内存中获取共享变量的最新值,释放锁的时候会将共享变量同步到主内存中。从而,synch.
2021-03-08 11:40:31
218
1
docker-machine v0.14.0
2018-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅