(更新中)谈谈个人对java并发编程中(管程模型,死锁,线程生命周期等问题) 见解

Posted 码宝宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(更新中)谈谈个人对java并发编程中(管程模型,死锁,线程生命周期等问题) 见解相关的知识,希望对你有一定的参考价值。

之前未曾接触过多线程编程  公司的项目开始用到多线程,所以自己谈谈个人对于并发编程的见解。

 

并发编程会导致线程不安全,常说的线程不安全指的是  多个线程操作一个共享数据,导致线程之间的读取到的数据不一致。

并发编程导致线程不安全的根源   可见性  原子性    有序性

 1 .可见性     cpu缓存导致。 一般cpu缓存中进行操作之后再将数据写到内存,在多核服务器中  每个线程都会分配一个cpu  都会在各自的cpu中进行处理再将数据统一写到内存中。每个cpu缓存中的数据都是不可见的。导致最红写入内存,然后再从内存中读出来时候数据不一致。

 2 原子性      在java语句中一行语句在服务器内部进行了多次操作。比如创建一个对象,new   在在堆中开辟一块空间  最后将地址赋予这个对象  如果在期间发生那个线程的切换  就可能会报错

3有序性       编译优化产生。指的是  在代码在JVM上执行的时候都会进行一定的编译优化,在优化之后  可能在创建对象的时候  先是将地址指向了对象然后再分配的内存空间

要解决这些问题,理论上禁用缓存和编译优化就可以了,对于原子性  使用volidate 关键字和 happen-before 规则就可以避免了。但是我们需要考虑到性能。(有时间再补充)

学过计算机的,都知道,实际上所有的并发问题都可以用信号量来解决。这个信号量实际上和管程是一样的 ,都能用来处理并发问题。

管程是一种模型,是一把解决并发的万能钥匙,Java中的

 

以上是关于(更新中)谈谈个人对java并发编程中(管程模型,死锁,线程生命周期等问题) 见解的主要内容,如果未能解决你的问题,请参考以下文章

java并发编程:管程内存模型无锁并发线程池AQS原理与锁线程安全集合类并发设计模式

并发编程——共享模型之管程

并发编程(学习笔记-共享模型之管程)-part3

Day833.Lock和Condition(上):隐藏在并发包中的管程 -Java 并发编程实战

Day833.Lock和Condition(上):隐藏在并发包中的管程 -Java 并发编程实战

Day828.多线程原语:管程 -Java 并发编程实战