Java高并发编程-(十三)CompletableFuture、ThreadLocal
Java 高并发编程 十三 CompletableFuture、ThreadLocal· CompletableFuture· 2.1 Future接口理论知识复习· Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。举例:比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线程开始执行任务后,主线程就去做其他事情了,忙完其他事情或者先执行完,过了一会再才去获取子任务的执行结果或变更的任务状态(老师上课时间想喝水,他继续讲课不结束上课这个主线程,让学生去小卖部帮老师买水完成这个耗时和费力的任务)。 2.2 Future接口常用实现类FutureTask异步任务· 2.2.1 Future接口能干什么· Future是Java5新加的一个接口,它提供一种异步并行计算的功能,如果主线程需要执行一个很耗时的计算任务,我们会就可以通过Future把这个任务放进异步线程中执行,主线程继续处理其他任务或者先行结束,再通过Future获取计算结果。 2.2.2 Future ...
Java高并发编程-(三)共享模型之管程synchronized底层原理、优化Monitor重量级锁、轻量级锁、自旋锁(优化重量级锁竞争)、偏向锁
Java 高并发编程 三(共享模型之管程)_ synchronized底层原理、优化Monitor重量级锁、轻量级锁、自旋锁(优化重量级锁竞争)、偏向锁· 一、 Monitor 概念· 1、 Java 对象头 (重点)· 对象头包含两部分:运行时元数据(Mark Word)和类型指针 (Klass Word) 运行时元数据 哈希值(HashCode),可以看作是堆中对象的地址 GC分代年龄(年龄计数器) (用于新生代from/to区晋升老年代的标准, 阈值为15) 锁状态标志 (用于JDK1.6对synchronized的优化 -> 轻量级锁) 线程持有的锁 偏向线程ID (用于JDK1.6对synchronized的优化 -> 偏向锁) 偏向时间戳 类型指针 指向类元数据InstanceKlass,确定该对象所属的类型。指向的其实是方法区中存放的类元信息 说明:如果对象是数组,还需要记录数组的长度 以 32 位虚拟机为例,普通对象的对象头结构如下,其中的Klass Word为类型指针,指向方法区对应的Class对象; 数组对象 其中 Mark Wo ...
Java高并发编程-(二)共享模型之管程 线程安全问题、synchronized保证线程安全、private或final的重要性、线程八锁问题分析、变量的线程安全分析
Java 高并发编程 二(共享模型之管程) 线程安全问题、synchronized保证线程安全、private或final的重要性、线程八锁问题分析、变量的线程安全分析· 一. 共享带来的问题· 1、小故事· 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快 小南、小女(线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用 但小南不能一天24小时使用算盘,他经常要小憩一会(sleep),又或是去吃饭上厕所(阻塞 io 操作),有时还需要一根烟,没烟时思路全无(wait)这些情况统称为(阻塞) 在这些时候,算盘没利用起来(不能收钱了),老王觉得有点不划算 另外,小女也想用用算盘,如果总是小南占着算盘,让小女觉得不公平 于是,老王灵机一动,想了个办法 [ 让他们每人用一会,轮流使用算盘 ] 这样,当小南阻塞的时候,算盘可以分给小女使用,不会浪费,反之亦然 最近执行的计算比较复杂,需要存储一些中间结果,而学生们的脑容量(工作内存)不够,所以老王申请了 一个笔记本(主存),把一些中间结果先记在本上 计算流程是这样的 但是由于分时系统,有一天还是发生 ...
SpringCloud基础笔记
什么是微服务架构: SpringCloud 是微服务一站式服务解决方案,微服务全家桶。它是微服务开发的主流技术栈。它采用了名称,而非数字版本号。 springCloud 和 springCloud Alibaba 目前是最主流的微服务框架组合。 版本选择: 选用 springboot 和 springCloud 版本有约束,不按照它的约束会有冲突。 本次学习的各种软件的版本: cloud Hoxton.SR1 boot 2.2.2. RELEASE cloud alibaba 2.1.0.RELEASE Java Java8 Maven 3.5及以上 Mysql 5.7及以上 Cloud简介· 参考资料,尽量去官网 https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/ 工程建造· 写一个下图的Hello World 构建父工程,后面的项目模块都在此工程中: 设置编码:Settings -> File Encodings 注解激活: Java版本确 ...
JavaScript基础
笔记来源:尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)_哔哩哔哩_bilibili JS简介· 1、什么是语言· 计算机就是一个由人来控制的机器,人让它干嘛,它就得干嘛。 我们要学习的语言就是人和计算机交流的工具,人类通过语言来控制、操作计算机。 编程语言和我们说的中文、英文本质上没有区别,只是语法比较特殊。 语言的发展: 纸带机:机器语言 汇编语言:符号语言 现代语言:高级语言 2、JS起源· JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证。 所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则。 比如:用户名的长度,密码的长度,邮箱的格式等。 3、JS简史· JavaScript是由网景公司发明,起初命名为LiveScript,后来由于SUN公司的介入更名为了JavaScript。 1996年微软公司在其最新的IE3浏览器中引入了自己对JavaScript的实现JScript。 于是在市面上存在两个版本的JavaScript,一个网景公司的JavaScript和微软的JScript。 为了确 ...
Vue3学习笔记
Vue3学习笔记(尚硅谷)· 🥽 创建Vue3项目· 🌊 vue-cli· 使用vue-cli创建Vue3项目,需要确保vue-cli版本在4.5.0以上。 123456## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上vue --versionvue -V## 安装或者升级@vue/clinpm install -g @vue/cli 使用vue-cli创建Vue3项目 1vue create vue3_study 🌊 vite· vite创建Vue3项目步骤: 12345678## 创建工程npm init vite-app <project-name>## 进入工程目录cd <project-name>## 安装依赖npm install## 运行npm run dev 1npm init vite-app vue3_study_vite 1cd vue3_study_vite 1npm i 1npm run dev 🥽 项目结构· 使用的为vue-cli创建的项目 src\main.js 123456// 引 ...
一、Spring原理-容器与 Bean
主要介绍了容器接口以及容器的实现。Bean的生命周期,Bean的后置处理器,Bean Factory的后置处理器。Aware接口,初始化、销毁。以及Scope
五、Spring原理-事件与补充
事件与补充· 43. FactoryBean· FactoryBean 是一个接口,可以实现该接口,并指定一个泛型,在重写的方法指定泛型类型对象的创建,然后将实现类交由 Spring 管理,最后 Spring 容器中会增加泛型类型的 Bean。这个 Bean 并不是完全受 Spring 管理,或者说部分受 Spring 管理。 为什么这么说呢? 首先定义一个 Bean2,交由 Spring 管理,但它不是重点: 123@Componentpublic class Bean2 {} 然后定义 Bean1,它未交由 Spring 管理,但是在其内部注入了 Bean2、定义初始化方法、实现 Aware 接口: 1234567891011121314151617181920212223@Slf4jpublic class Bean1 implements BeanFactoryAware { private Bean2 bean2; @Autowired public void setBean2(Bean2 bean2) { this.bean2 = bean2 ...
四、Spring原理-SpringBoot
SpringBoot· 37. Boot 骨架项目· 使用 IDEA 创建 SpringBoot 项目时,会创建出 .mvn 目录、HELP.md、mvnw 和 mvnw.cmd 等不必要的文件。 如果是 Linux 环境下,执行以下命令获取 SpringBoot 的骨架,并添加 web、mysql、mybatis 依赖: 12curl -G https://start.spring.io/pom.xml -d dependencies=web,mysql,mybatis -o pom.xml 也可以使用 Postman 等接口测试工具来实现。 更多用法执行以下命令进行参考: 1curl https://start.spring.io 但说实话,实际开发时宁愿直接使用 IDEA 创建项目。 38. Boot War 项目· 38.1 项目的构建· 利用 IDEA 创建新模块 test_war,区别在于选择的打包方式是 War: 选择依赖时,勾选 Spring Web。 一般来说,选择 War 作为打包方式都是为了使用 JSP,因为 JSP 不能配合 Jar 打包方式使用。 JSP 文 ...
三、Spring原理-WebMVC
WebMVC· 20. RequestMappingHandlerMapping 与 RequestMappingHandlerAdapter· 20.1 DispatcherServlet 的初始化· 选择支持内嵌 Tomcat 服务器的 Spring 容器作为 ApplicationContext 的实现: 12345public static void main(String[] args) { AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);} WebConfig 作为配置类,向 Spring 容器中添加内嵌 Web 容器工厂、DispatcherServlet 和 DispatcherServlet 注册对象。 12345678910111213141516171819202122232425262728293031/** * @author ...