首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
aqiao
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
5
文章 4
沸点 1
赞
5
返回
|
搜索文章
最新
热门
Idea 搭建SpringCloud常见问题
使用Idea搭建微服务开发环境时,我们多使用嵌套module来组织项目.如果配置不合适,会出现各种莫名其妙的问题.在此记录一下,避免以后重复趟坑. 分析: SpringCloud依赖SpringBoot,不同SpringCloud版本依赖特定的SpringBoot版本.因为我们…
mybatis-spring-boot-starter 使用
mybatis-spring-boot-starter出来有一段时间了,一直没机会用.最近正好有时间, 想尝试看看有没有什么亮点,并记录一下期间遇到的问题. 1. 添加dependency 我这里使用的是2.1.3 你可以使用其他版本. 2. 添加数据库配置 因为我是用mysq…
绕不开的"锁"(三)
上篇我们讲解了对象的存储结构,并学会了如何使用JOL来观察对象.下面我们继续利用该工具来观察Synchronized的锁升级过程. 为什么会存在锁升级?根本原因就是为了提高Synchronized性能. 在早期的JDK实现中,Synchronized会借助监视器(也有叫管程的)…
绕不开的"锁"(二)
现在我们开始讲解Synchronized的底层实现.为什么上来就讲底层? 因为面试问的就很底层. 按照惯例,讲Synchronized必须要先讲解对象头,然后是锁升级过程,这也是面试重点考察的地方.其实我们也不光为了面试,最终目的还是为了帮助我们写出更加稳定高效的并发程序.越是…
绕不开的"锁"(一)
学习多线程的根本目的是为了让程序能充分利用CPU资源在合理的时间范围内完成任务.现在的计算机往往是一个CPU多个物理核心,有的物理核心又可以模拟出两个逻辑核心,也就是所谓的超线程技术.不管是多线程还是超线程,目的只有一个: 提高计算能力.但是,任何事物有好的一面就有坏的一面,包…
如何优雅地结束线程(二)
方法接受一个耗时任务作为参数,执行线程不会直接执行任务,而是交给守护线程(daemon).注意,执行线程通过daemon.join()来等待守护线程执行完成,从而保证二者的状态一致.守护线程执行完将结束标志设置为true,从而通知其他线程. 方法接受一个超时参数,当结束标志为f…
如何优雅地结束线程(一)
在我看来,如果一个线程能在合理的时间和资源消耗下正常结束那就是最优雅的.这一句话看似简单,但有时却很难实现.因为它不光涉及到线程层面的知识,还包含具体的业务操作.比如,对计算密集型的操作和IO密集型的操作,就需要不同的设计. 对于计算密集型的业务,首先要考虑增加工作者线程和内存…
线程的生命周期(三)
我们知道,在java多线程开发过程中要经常使用锁来保护临界区数据.根据不同用法和场景锁有着不同的分类,其中一种就是显式锁和隐式锁. 所谓显示锁就是需要在代码中显式地的加锁和解锁,而隐式锁则是JVM来完成上述过程.比如synchronized关键字对应一种隐式锁,而Lock则对应…
线程的生命周期(二)
我们再回顾一下内核的线程状态:New, Ready, Running, Sleeping, Terminated. 我们看到JVM和内核线程之间还是有一些差别,那具体什么差别呢?上图 内核的Sleeping状态对应JVM的BLOCKED,WAITING和TIMED_WAITIN…
线程生命周期(一)
今天我们看一下线程的生命周期.我们在学习多线程时似乎并不是很看重线程的生命周期,或许是觉得它很简单,或许是因为面试的时候很少被问及,所以感觉它不是很重要.其实不然,熟练掌握线程生命周期的各个状态及状态间的转换,不仅有利于理解线程如何工作,而且对后面锁的理解很有帮助. 上面介绍操…
下一页
个人成就
文章被点赞
42
文章被阅读
35,330
掘力值
1,412
关注了
27
关注者
6
收藏集
0
关注标签
7
加入于
2019-10-07