并发编程(七):线程的生命周期

1.线程生命周期模型1.1.通用的线程生命周期模型1.2.Java中线程的生命周期2.线程状态的转换2.1.RUNNABLE与BLOCKED的状态转换2.2.RUNNABLE与WAITING的状态转换2.3.RUNNABLE与TIMED_WAITING的状态转换2.4.从NEW到RUNNABLE状态

并发编程(六):管程

1.是什么2.MESA模型2.1.解决互斥问题2.2.解决同步问题wait() 的正确姿势2.3.Hasen 模型、Hoare 模型和 MESA 模型的核心区别2.4.何时使用notify()2.5.Java内置的管程-synchronized1.是什么Java1.5之前,提供的唯一并发语言就是管程

并发编程(五):安全性、活跃性以及性能问题安全性、活跃性以及性能问题

1.安全性问题2.活跃性问题2.1.死锁2.2.活锁2.3.饥饿3.性能问题1.安全性问题概念:线程安全,就是正确性,正确性就是程序按照我们期望的执行导致线程安全的三个源头:可见性有序性原子性什么时候才需要注意产生安全性问题呢?存在共享数据并且该数据会发生变化,简单来说就是多个线程会同时读写同一数据

并发编程(四):如何应对死锁

1.死锁的情况2.如何预防死锁2.1.破坏“占用且等待”2.2.破坏“不可抢占条件”2.3.破坏“循环等待条件”3.用“等待-通知”机制优化“循环-等待”3.1.用 synchronized 实现等待 - 通知机制3.2.等待-通知机制的范式3.3.尽量使用notifyAll()1.死锁的情况针对有

并发编程(三)互斥锁:解决原子性问题

1.原子性问题如何解决2.互斥2.1.简易锁模型2.2.改进后的锁模型2.3.Java提供的锁机制:Synchronized2.4.锁和受保护资源的关系3.如何用一个锁保护多个资源3.1.保护没有关联的多个资源3.2.保护有关联关系的多个资源1.原子性问题如何解决原子性的源头是线程切换。而前程切换是

并发编程(二)Java内存模型:解决可见性、有序性问题

1.Java内存模型2.Happens-before规则1.Java内存模型导致可见性的原因是CPU缓存、导致有序性的原因是编译器优化,那么按需禁用缓存和编译优化就有了一定的必要,但是该如何按需禁用呢?对于程序员而言,如何做到按需禁用呢?JVM会提供相关方法给程序员。站在程序员的视角,本质上可以理解

并发编程(一)并发编程bug的源头:可见性、有序性、原子性

1.并发编程的幕后2.问题一:缓存导致的可见性问题3.源头之二:线程切换带来的原子性问题4.源头之三:编译优化带来的有序性问题5.总结1.并发编程的幕后CPU、内存、磁盘IO的速度差异,CPU>内存>磁盘程序中的一个操作,可能会访问内存也可能还要访问磁盘,根据木桶理论我们能知道此时的性能

并发编程(Pre):总览

1.并发编程的三个核心问题:分工:同步:互斥:2.并发编程的实质:操作系统1.并发编程的三个核心问题:分工同步互斥分工:高效的拆解任务并分配给多个线程,例如Fork/Join框架就是一种分工模式通俗来说,就是现实当中需要完成一个项目,项目经理需要将任务分配给不同的人员完成,Java SDK并发包中的

对象的共享

对象的共享对于可变状态的管理同步-线程安全性共享和发布变量同步对象的状态可见性什么是可见性?对于状态的修改,对于其他线程是能够及时同步到的,称之为可见性重排序为什么需要重排序?如果代码严格按照我们所编写的代码顺序执行,则会出现如下问题假设有三个操作,代码顺序如下 A写入流 B执行其他操作 C写入流,
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×