java并发编程
文章平均质量分 69
腾云丶
这个作者很懒,什么都没留下…
展开
-
线程安全性
线程安全性一、线程安全性的核心“共享”意味着变量可以由多个线程同时访问,而“可变”则意味着变量的值在其生命周期内可以发生变化。所以,线程安全性的核心是要对访问操作进行管理,特别是对共享的(shared)和可变的(Mutable)状态的访问。二、可变状态变量出现错误对于多线程状态下,“可变” 意味着不安全,如果不进行同步,意味着可能会发生错误。一般有三种方式可以修复这个问题:...原创 2018-09-10 20:11:59 · 1202 阅读 · 0 评论 -
并发编程实战(1):线程安全性之有状态和无状态对象
进程和线程的区别进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.进程在执行过程中拥有独立的内存单元,进程有独立的地址空间, 而多个线程共享内存,从而极大地提高了程序的运行效率。进程有单独的地址空间,包括:文本域(text regio...原创 2018-11-15 15:13:52 · 1277 阅读 · 0 评论 -
并发编程实战(2):原子性、可见性和竞态条件与复合操作
原子性一个不可分割的操作,比如a=0;再比如:a++; 这个操作实际是a = a + 1;是可分割的,它其实包含三个独立的操作:读取a的值,将值加1,然后将计算结果写入a,这是一个“读取-修改-写入”的操作序列,所以他不是一个原子操作。可见性可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果,另一个线程马上就能看到。比如:用volatile修饰的...原创 2018-11-15 21:59:56 · 1245 阅读 · 1 评论 -
并发编程实战(3): Thread 和 Runnable
写在前面这两个一直放在一起比较,网上太多文章,关键有很多错误的,都是抄来抄去。比如这篇文章我就觉得讲的不好,可以看评论区小白猿疼疼的评论,Runnable是只实例化一个类对象,开启三个线程去运行,而Thread是实例化三个类对象,在java中创建启动线程的唯一方法是调用它的start方法。 可以发现作者其实也没真正搞明白。关于文中的一个观点:实现Runnable可以资源共享,给出的代码例子并不...原创 2018-11-19 15:56:01 · 1233 阅读 · 0 评论 -
并发编程实战(4): 线程封闭
同步当访问共享可变数据时,需要使用同步技术保证数据的一致性。如果不使用同步,则需要避免共享数据。如果仅仅在单线程内访问数据,就不需要使用同步,这种技术被称为线程封闭(Thread Confinement。例如Swing、JDBC等都大量使用了此技术。常见的线程封闭技术主要有以下几种:Ad-hoc线程封闭这种线程封闭主要是指,维护线程封闭性的职责完全由程序创建者承担,所以非常脆弱。这种技术一般...原创 2018-11-19 19:36:15 · 1122 阅读 · 0 评论 -
并发编程实战(5): 不变性、final与线程安全
不变性与final字段如果某个对象在被创建后其状态就不能被修改,那么这个对象就被成为不可变对象。在Java中,final类型的域是不能修改的。不可变性不等于将对象中的所有域都声明为final类型,即使对象中的所有域都是final类型的,这个对象仍然是可变的,因为在final类型的域中保存对可变对象的引用。当满足以下条件时,对象才是不可变的:对象创建以后其状态就不能修改对象所有的域都是f...原创 2018-11-20 13:29:36 · 1396 阅读 · 1 评论 -
并发编程实战(6)fail-fast机制与ConcurrentModificationException
并发编程实战(6): fail-fast机制与ConcurrentModificationExceptionConcurrentModificationException异常java.util.ConcurrentModificationException是一个非常常见的异常,常见于对List、Map等集合的操作当中。那么,这个异常是什么呢?又为什么会产生这个异常呢?随便打开ArrayLis...原创 2018-11-25 11:07:55 · 773 阅读 · 0 评论 -
并发编程实战(7)线程池相关
线程池的使用一、线程池概念线程池通过重用现有的线程而不是创建新线程,可以减少线程创建和销毁过程带来的巨大开销。另外一个好处是,当请求到达时工作线程通常已经存在,不会由于等待创建线程而延迟任务的执行,从而提高的响应性。通过适当调整线程池的大小,可以创建足够多的线程以便使处理器保持忙碌状态,同时还可以防止过多线程相互竞争资源而是应用程序耗尽内存或失败。创建线程池Executors中的静态工厂...原创 2019-04-29 20:38:08 · 199 阅读 · 0 评论 -
并发编程实战(8)任务的执行与取消
单任务顺序执行与每个任务一个线程单线程顺序执行任务,效率过低,没有发挥多核的优势。为每个任务分配一个线程去执行,速度有所提升,但是有很大的缺陷。无限制创建线程的不足生产环境中,每一个任务分配一个线程的方法存在一些缺陷,尤其是需要创建大量的线程时:线程生命周期的开销非常高。线程的创建与销毁是有代价的,延迟处理的请求,并且需要JVM和操作系统提供一些辅助操作。如果请求的到达率非常高且请求的...原创 2019-04-29 20:39:05 · 174 阅读 · 0 评论