nest

Java多线程之synchronized详解

删除回忆录丶 提交于 2020-08-17 03:23:30
目录 synchronized简介 同步的原理 对象头与锁的实现 锁的优化与升级 Monitor Record 锁的对比 synchronized简介 synchronized 关键字,一般称之为“同步锁”或者重量级锁(JAVA SE 1.6之后引入了 偏向锁 和 轻量级锁 )。它具有可重入性. 根据锁的锁的“对象”不同可以分为对象锁和类锁: 对象锁: 对于普通的同步方法,锁的是当前实例的对象 对于同步方法块,如果 synchronized 括号里配置的是类的实例对象,则锁的是配置的对象 类锁: Class 对象锁 对于静态同步方法,锁的是当前类(具体说是当前类的Class对象) 对于同步方法块,如果 synchronized 括号里配置的是类的 Class 对象,则锁的是当前类 类锁其实也锁的是一个对象,不过是特殊的 Class 对象,所以类锁并不是真实存在的。但是他们之间有不同的目的 对象锁用来控制实例方法之间的同步 类锁是用来控制静态方法(或者静态变量互斥体)之间的同步的。 同步的原理 JVM 基于进入和退出 Monitor 对象来实现方法的同步和代码块同步。每个对象都有一个 Monitor 与之关联,当其被占用就会处于锁定的状态。 Monitor 并不是一个对象,只是习惯了这样一个称呼,他被保存在对象头的 Mark Word 中。 在Java虚拟机(HotSpot)中

postgresql SQL 优化

与世无争的帅哥 提交于 2020-08-17 01:02:16
postgres SQL 优化 查找慢 SQL 使用 pg_stats_statements 查找 开启 auto_explain 使用 auto_explain mode, 开启以下选项 log_nested_statements log_min_duration Index Tuning pg_stats... 相关视图 sql SELECT relname, seq_scan - idx_scan AS too_much_seq, CASE WHEN seq_scan - coalesce(idx_scan, 0) > 0 THEN 'Missing Index?' ELSE 'OK' END, pg_relation_size(relname::regclass) AS rel_size, seq_scan, idx_scan FROM pg_stat_all_tables WHERE schemaname = 'public' AND pg_relation_size(relname::regclass) > 80000 ORDER BY too_much_seq DESC; 没有使用索引 SELECT indexrelid::regclass as index, relid::regclass as table, 'DROP INDEX ' || indexrelid:

第一章:初识物联网

天大地大妈咪最大 提交于 2020-08-11 18:17:21
笔记由个人整理 此课程源于华为云学院的人人学IoT 1.1 用一杯咖啡的时间初探物联网 起源: 特洛伊咖啡壶 物联网的提出:早期概念定义指RFID(射频识别)技术和设备,按预定的通信协议执行 2005:国际电信联盟引用物联网的概念 2008:IBM提出“智慧地球” 2009:“感知中国” 2013:德国“工业4.0” 时期分布 1999~2013:只是概念的提出,仅限于无线射频领域的“物” 2014~2016:Google收购Nest, 物联网从无线射频发展到智能穿戴和智能家居 2016~至今:智能穿戴和智能家居已经成熟落地并进入日常生活中 云管端 的逻辑体系 感知层:负责信息收集和信号处理 网络层:负责终端接入和数据传输 平台层:负责设备通信管理、数据存储、业务规划 应用层:负责数据呈现及客户交互 物联网应用 公共事业物联网 车联网 工业物联网 智慧家庭物联网 通信技术( 根据业务需要采用相应的通信技术 ) 4G、5G、LTE-V:成本较高、功耗较高、大于10mbps 车联网、视频监控、智能机器 eMTC、GPRS:成本较低、功耗较低、约为1mbps 智能穿戴设备、梯联网、电子广告、无线ATM NB-Iot:成本低、功耗低、小于100kbps 远程抄表、远程停车、智慧农业 1.2 稳定可靠的有限通信 有线通信技术: 稳定性强、可靠性高,但受限于媒介 以太网

Spring MVC 函数式编程进阶

梦想的初衷 提交于 2020-08-11 04:45:46
1. 前言 上一篇对 Spring MVC 的函数式接口编程 进行了简单入门,让很多不知道的同学见识了这种新操作。也有反应这种看起来没有传统写法顺眼,其实大家都一样。但是我们还是要敢于尝试新事物。 Java Lambada 刚出来也是被人各种吐槽,现在我在很多项目都见到了它的身影。好了转回正题,本文是对上一篇的延伸,我们继续对 Functional Endpoint 进行一些了解和运用。范式转换其实上一篇已经介绍差不多了,但是一旦你初次接触这种方式往往会面临新的问题。 2. 新的问题 在使用这种风格时我们也会遇到一些新的问题。接下来我们将通过举例来一步步解决这些问题。 2.1 如何异常处理 接口异常处理是必须的。改成函数式风格后异常可以这样处理: /** * 接口附带异常处理逻辑. * * @param userService the user service * @return the user by name with error handle */ public RouterFunction<ServerResponse> withErrorHandle() { return RouterFunctions.route() .GET("/userwitherrorhandle/{username}", request -> ServerResponse.ok() .body