Java内存模型与线程
Yes_JiangShuai
默默奋斗的攻城狮 向往掌握技术而不限于技术
展开
-
Java内存模型与线程02:主内存和工作内存
一、引言Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来拼搏掉各种硬件和操作系统的内存访问差异,以实现让Java程序直接在各种平台下都能达到一致的内存访问效果。在此之前,主流编程语言(C、C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一套平台上并发访问却经常出原创 2017-05-23 16:03:16 · 586 阅读 · 0 评论 -
Java内存模型与线程01:概述
一、并发概述多任务处理在现代计算机操作系统中几乎是已是一项必备的功能了。在很多情况下,让计算机同时去做几件事,不仅是因为计算机的运算能力太强大了,还有一个很重要的原因就是计算机的运算速度与它的存储和通信子系统速度的差距太大了,大量的时间都浪费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处在等待其他资源的状态,就必须使用一些手段去把处理器的运算能力尽可能的高效率使用起原创 2017-05-19 10:53:42 · 492 阅读 · 0 评论 -
Java内存模型与线程03:内存间交互操作
关于主内存与工作内存之间具体的交互协议,即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步回主内存之类的实现细节,Java内存模型中定义了以下8种操作来完成,虚拟机实现时必须保证下面提及的每一种操作都是原子的、不可再分的(对于double和long类型的变量来说,load、store、read和write操作在某些平台上允许有例外,我们下回再叙。)1、lock(锁定):作用于主内存的变量原创 2017-06-01 14:37:24 · 668 阅读 · 0 评论 -
Java内存模型与线程04:对于volatile型变量的特殊规则
一、写在前面的话关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整的理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一般使用synchronized来进行同步。了解volatile变量的语义对于后面了解多线程操作的其他特性很有意义。二、关键字volatile当一个变量被定义为volatile之后,它具备两种特原创 2017-06-02 10:49:21 · 618 阅读 · 0 评论 -
Java守护线程
Java提供了两种线程:守护线程与用户线程。守护线程又被称为“服务进程”、“精灵线程”或“后台线程”,是指在程序运行时在后台提供一种通用服务的线程,这种线程并不属于程序中不可或缺的部分。通俗点讲,任何一个守护线程都是整个JVM中所有非守护线程的“保姆”。用户线程和守护线程几乎一样,唯一的不同之处就在于如果用户线程已经全部退出运行,只剩下守护线程存在了,JVM也就退出了。因为当所有非守护线程结束原创 2017-06-03 16:28:30 · 325 阅读 · 0 评论 -
使用Callable接口创建线程(Java5新增)
使用Runnable接口创建多线程时,Thread类的作用就是把run()方法包装成线程体。那么是否可以直接把任意方法包装成线程执行体呢?Java目前不行!但C#可以!也许受此启发,从Java5开始,Java提供了Callable接口,该接口其实就是Runnable接口的增强版,它提供了一个call()方法作为线程执行体,但call()方法比run()方法功能更强大:1、call()方法可原创 2017-06-04 11:23:33 · 749 阅读 · 0 评论