首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
lixiangdude
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
2
文章 2
沸点 0
赞
2
返回
|
搜索文章
最新
热门
浅谈Spring中的@EventListener和@TransactionalEventListener
Spring中的发布/订阅模式非常好用,我个人经常将它用于监听程序中的事件并做相应的处理,这样有利于分离关注点和代码解耦。而本文的目的就在于描述@EventListener和@TransactionalEventListener的区别,帮助大家更好地使用发布/订阅模式。 假设我…
Java并发编程(十)——重入锁(ReentrantLock)
重入锁可以完全替代synchronized关键字。事实上,在JDK1.5之前,重入锁的性能远远好于synchronized,但从JDK1.6后在synchronized上做了大量的优化,使得两者的性能差距并不大。 重入锁的类路径是java.util.concurrent.loc…
Java并发编程(九)——线程安全的概念与synchronized
线程安全是编写并发程序时最需要关注的重点之一。程序并行化固然可以提高运行效率,但前提是不能牺牲正确性。如果连程序的正确性都无法保证,并行化也就没有任何意义了。因此,线程安全就是并行程序的根本。之前的文章中介绍了使用volatile将多线程读写long会出现错误的情况进行了改善,…
Java并发编程(八)——守护线程(Daemon)
在讲守护线程之前,需要先了解一个相对应的概念——用户线程。用户线程可以理解为系统的工作线程,用于处理业务上的操作。而守护线程,顾名思义,它负责守护系统,默默地在后台进行一些系统层面的处理。比如负责垃圾回收、JIT等的线程就可以称为守护线程。当用户线程全部结束,也就代表着系统没有…
Java并发编程(七)——volatile与Java内存模型(JMM)
在前文中已经简单介绍了Java内存模型,JMM是围绕着原子性、可见性和有序性展开的。为了在适当的场合确保线程间的原子性、有序性和可见性,Java使用了一些特殊的操作和关键字来申明:不要在这个地方随意对指令进行优化或变动。volatile关键字就是其中之一。 当你用volatil…
Java并发编程(六)——线程的基本操作(下)
4. 等待(wait)和通知(notify) 为了支持多线程之间的协作,JDK提供了两个非常重要的方法:wait()和notify()。这两个方法并不专属于Thread类,而是属于Object类。也就是说任何对象都可以调用这两个方法。 当一个对象调用wait()方法后,当前线程…
Java并发编程(五)——线程的基本操作(上)
进行Java并发程序设计的第一步就是要了解Java中为线程操作提供的一些API。比如,如何创建并运行线程,如何中断线程,如何终止线程等。因为并行操作要比串行操作复杂的多,所以在日常使用中我们经常会遇到一些意想不到的情况,本章将尽可能将一些潜在问题描述清楚。 新建线程的操作很简单…
Java并发编程(四)——什么是线程
在介绍线程前,我们需要先了解一下线程的”母亲“——进程。 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中…
Java并发编程(三)——JMM
前两篇介绍了有关并行程序的一些与语言无关的关键概念。本篇我们来回到Java,说一下JMM——Java内存模型(Java memory model)。 由于并发程序下数据访问的一致性和安全性将受到严重挑战,所以需要在了解并行机制的前提下再定义一种规则,保证多个线程可以有效地、正确…
Java并发编程(二)——并发级别
由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,可以把并发分为几个级别:阻塞、无饥饿、无障碍、无锁、无等待。 当一个线程等待由其他线程占有的资源,并且在资源被释放之前当前线程无法继续执行,这时我们称这个线程为“阻塞”的。当我们使用synchronized关键…
下一页
个人成就
文章被点赞
17
文章被阅读
10,713
掘力值
298
关注了
1
关注者
4
收藏集
1
关注标签
10
加入于
2018-09-19