- 博客(19)
- 资源 (26)
- 论坛 (6)
- 问答 (9)
- 收藏
- 关注

原创 Java 并发编程技术实践之路专栏导读
背景拟准备重新整理一下 Java 并发编程相关的技术知识,系统并完善地介绍自己阅读 Java 并发包源码的心得,并结合工作中碰到的有关并发的问题,写一个关于 Java 并发编程的专栏系列。此篇为开题导读,让我们来回顾一下 Java 并发相关的知识图谱。...
2019-12-19 22:57:18
325
3
原创 实践篇:如何编写线程安全的类
文章目录引言线程安全的几种实现设计不变的类引言并发环境下设计线程安全的类,一个类如果是不变的,那么它一定就是线程安全的。这是设计模式中不变模式的一种,一个对象在创建之后,它的状态就不会再发生变化,它就是不变类。java中的String,各种基本类型的封装类型,都是不变类。在设计任何一个类的时候,应当慎重考虑其状态是否有需要变化的可能性。如果其状态没有变化的必要,那么就应当将它设计成不变类。线...
2019-12-31 12:15:41
226
原创 干货篇:论线程池资源关闭的重要性
引言本文是根据笔者去年写的一篇付费文章整理而来的,主要介绍 Java Web 应用中线程池资关闭的重要性。背景是这样的,笔者去年参与了一个小项目的开发,部署测试环境时得知客户要求使用 jboss 企业版作为 web服务器。笔者之前参与的所有项目都是基于Tomcat 的,测试时直接重启Tomcat,没遭遇过JVM 内存泄露问题。本文将以本人在 jboss 服务器下部署测试的工作经历,聊聊 Ja...
2019-12-26 18:38:01
312
原创 并发案例:如何保证统计变量的原子性
文章目录引言i++ 数据不一致案例分析案例描述问题分析解决办法AtomicInteger 原子类概述案例描述问题分析延伸测试启示录引言i++ 这个简单的语句,想必大家都不陌生,但是在多线程环境下,如果 i 是一个全局共享变量,那么它还能正确地按顺序累加吗?这就是本文要介绍的内容,如何保证统计变量的原子性。其实,i++ 是由 “读取-修改-写入” 三个操作序列组成的复合操作,应该保证它们的原子...
2019-12-25 12:21:38
216
原创 并发案例:CyclicBarrier 使用不当导致死锁问题分析
文章目录引言功能分析单线程调度死锁问题复盘打破死锁的方法编程启示录引言前文讲述了 CyclicBarrier 和 CountDownLatch 的基本用法,本文笔者将给大家复盘一个 CyclicBarrier 使用不当导致线程饥饿死锁的踩坑经历。今年年初的时候,笔者写过一个简单的应用,对不同 Linux 系统的防火墙文件进行解析,将 NAT 转换信息解析后存入数据库。本来每个文件都不大,单...
2019-12-24 20:34:22
419
原创 基础篇: CyclicBarrier 和 CountDownLatch 概述
文章目录背景Java 并发知识思维导图CyclicBarrier 基本用法构造方法实践编码测试类结果分析CountDownLatch 用法概述使用案例编程启示录背景电脑桌面上有一张“Java 并发编程知识思维导图”,最近刚好又用到了 CyclicBarrier 类,这是一篇笔者周末总结的 CyclicBarrier 用法的旧文,今天再对此文修正调整后正好作为专栏的一部分。Java 并发知识思...
2019-12-24 20:20:46
272
原创 死锁篇:线程饥饿死锁问题
文章目录引言线程饥饿死锁资源死锁Timer 定时器死锁分析引言线程饥饿死锁《Java并发编程实践》中对线程饥饿死锁的解释是这样的:在使用线程池执行任务时,如果任务依赖于其他任务,那么就可能产生死锁问题。在单线程的Executor中,若果一个任务将另一个任务提交到同一个Executor,并且等待这个被提交的任务的结果,那么这必定会导致死锁。第一个任务在工作队列中,并等待第二个任务的结果;而第二...
2019-12-24 19:11:19
363
原创 死锁篇:协作对象死锁问题
协作对象间的死锁问题在协作对象之间可能存在多个锁获取的情况,但是这些获取多个锁的操作并不像在LeftRightDeadLock或transferMoney中那么明显,这两个锁并不一定必须在同一个方法中被获取。如果在持有锁时调用某个外部方法,那么这就需要警惕死锁问题,因为在这个外部方法中可能会获取其他锁,或者阻塞时间过长,导致其他线程无法及时获取当前被持有的锁。《java并发编程实践》中出租车调...
2019-12-23 18:19:33
293
原创 死锁篇:锁顺序死锁问题
文章目录引言什么是锁顺序死锁动态的锁顺序死锁实践启示录引言初次接触死锁的概念是大学的一门课程《操作系统原理》中描述的“哲学家进餐”问题。操作系统中,由于各个进程共享系统资源而可能出现死锁问题。同样 Java 多线程环境下,也存在资源共享导致的死锁问题。当一组Java 线程发生死锁时,程序有可能就此阻塞,而无法正常结束。Java 应用程序中,我们使用加锁机制来确保线程的安全,但是如果过度地使用加锁,可能...
2019-12-23 11:30:03
330
原创 源码篇:ThreadPoolExecutor 任务饱和策略验证
文章目录引言策略一:通知模式抛弃策略二:静音模式抛弃策略三:限制提交策略四:调用者执行引言使用java的任务管理框架的线程池执行任务时,线程池的任务等待队列被填满时,饱和策略开始发挥作用。ThreadPollExecutor的饱和策略通过setRejectedExecutionHandler来修改。JDK提供了4中饱和策略如下:策略一:通知模式抛弃AbortPolicy是默认的饱和策略,...
2019-12-22 19:20:19
288
原创 源码篇:ThreadPoolExecutor 源码阅读笔记
文章目录引言线程扩容机制线程池提交任务的流程任务饱和策略引言java并发包中的任务调度框架Executor的实现类ThreadPoolExecutor的源码阅读。线程扩容机制ThreadPoolExecutor提供了某些Executor的基本实现,是一个灵活的、稳定的、支持定制的线程池。首先,类结构图如下:线程池维护着三个容量变量poolSize、corePoolSize、maxPoo...
2019-12-22 11:54:03
148
原创 源码篇:ReentrantLock 源码分析下篇
文章目录引言lock 和 lockInterruptibly 的区别lock 源码lockInterruptibly 源码条件队列条件队列的节点状态等待和唤醒操作引言上一节介绍了 ReentrantLock 类的 lock 锁获取流程,本节主要介绍两个知识点:lock 和 lockInterruptibly的区别条件队列的实现逻辑lock 和 lockInterruptibly 的区...
2019-12-21 17:30:49
159
原创 源码篇:ReentrantLock 源码分析上篇
文章目录引言类图结构公平锁NonfairSync 锁引言AQS ,全称「 AbstratcQueuedSynchronizer 」,它是Java 的显式锁实现的基础框架,本质是一个队列结构,以先进先出的方式维护线程的阻塞和唤醒。JDK 源码中,AbstratcQueuedSynchronizer 类定义时的注释是这样写的:Provides a framework for implemen...
2019-12-21 12:20:19
183
原创 基础篇:独占锁、共享锁、公平锁、非公平锁,叫我如何分得清
背景本文继续讲解 Java 并发编程实践的基础篇,独占锁和共享锁,它跟上一篇的内置锁和显式锁的具体的实现策略。锁的独占与共享java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享资源,如:ReadWriteLock。AQS的内部类Node定义了两个常量SH...
2019-12-21 10:08:11
680
原创 基础篇:内置锁实现生产者和消费者模型
“生产者和消费者模型” 是多线程通信的典型案例,本章节将利用前一节的锁和条件队列的知识,来实现一个完整的有界缓冲区,并创建多个线程访问该有界缓冲区,模拟生产者提供数据、消费者处理数据的过程。
2019-12-20 19:19:53
318
1
原创 基础篇:内置锁和显式锁摸底
内置锁和显式锁是 Java 的两种不同加锁机制,在实际开发中是互斥的,只能选择一种方式,不能混用。笔者近几年在 CSDN 问答模块看到不少关于 synchronized 和 wait、notify 的提问,意识到这可能是初学者不太容易理明白的问题,所以本文来整理下二者的用法和注意事项。内置锁和显式锁内置锁和显式锁完成简单的同步代码逻辑,这里的简单是不使用条件队列的情况下,其实没什么特别注意的...
2019-12-20 09:40:23
543
原创 Vue 学习笔记: 组件通信方式汇总
背景Vue.js 在前端貌似很火的样子,虽然年初玩过 Angular.js ,同为前端框架,使用体验很类似,但是 Angular.js 的知识已经淡忘了,
2019-12-18 18:02:15
189
原创 Vue 学习笔记:$attrs 和 $listeners 的用法
学习 vueAdmin-template 项目时,看到两个属性 v-bind="$attrs" 和 v-on="$linteners",于是就这两个属性的用法作了一下深入的了解,通过一个简单的 demo 测试并理解了它们的用法和作用。我们知道,向子组件传递数据,是通过 v-bind 一个子类组件定义的 props 属性完成的,这只使用于单向两层组件引用之间。同样地,事件传递也是在父组件中用 v...
2019-12-07 18:37:37
1262
原创 Vue 学习笔记:工具篇
背景github 上的一个vue 项目导入 IDEA 后,打开工程目录,发现各种标红的代码,但是工程能正确启动。本文记录去掉这些错误提示的过程,根源是 IDEA 环境配置不识别的问题,IDEA 识别的有问题的文件,它的颜色跟正常文件颜色都不一样,是红色的,普通文件名显示红色,js 直接用红色波浪线标红了。具体表现如下:1、Vue 文件中属性标签不识别在一个 div 中有一个事件配置,但是...
2019-12-07 10:37:00
167
jpa学习总结,pdf类型的,详细介绍了jpa的应用
2010-10-07
iBatis视频,详细介绍,及总结,这是传智播客里面的一个教学资源,详细介绍了ORM的可靠产品iBatis的基本操作过程
2010-10-07
IntelliJIDEA快捷键与Eclipse对比
2017-06-02
秋天送福利啦,赠送可用分!一起来学习Java 并发编程吧!
发表于 2020-09-26 最后回复 2020-09-26
521有福利,赠送可用分!一起来学习Java 并发编程吧
发表于 2020-05-21 最后回复 2020-08-19
新版博客能不能去掉“阅读全文”按钮呢?
发表于 2018-02-05 最后回复 2020-06-11
毕小宝的留言板
发表于 2020-01-02 最后回复 2020-02-10
JMS使用Weblogic访问远程队列中的消息异常
发表于 2011-05-25 最后回复 2011-05-25
Weblogic 远程连接队列是出现异常
发表于 2011-05-25 最后回复 2011-05-25
【Vue 问题】Vue+go.js 去掉点击时绘图区域的外边框问题
2020-09-27
【先电云部署问题】怎么用本地源 ISO 来安装先电云基础平台呢?
2020-09-14
ECharts 3 如何触发图表的tooltip行为?
2018-10-15
echarts地图的散列点,需要每个区域的闪烁点的大小各不相同
2018-10-15
Java的File的delete方法在Linux下运行结果为false
2016-11-25
写一个sh脚本,重新部署java web项目
2016-08-08
java web项目部署到linux服务器上和本机的响应效率的区别。
2016-05-26
sql表进行数据统计,由第一个表统计得到第二个表
2016-04-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝