码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-04-09 12:23:50      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:生命周期   地址   过多   java并发编程   并发   创建   行操作   数据不一致   性能   

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

 

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

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

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

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

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

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

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

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

 

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

标签:生命周期   地址   过多   java并发编程   并发   创建   行操作   数据不一致   性能   

原文地址:https://www.cnblogs.com/mrxiab/p/10676116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!