文档章节

并发编程(一)——Java中的线程状态

whc20011
 whc20011
发布于 2016/10/20 21:20
字数 903
阅读 92
收藏 2

一、Java线程状态变迁

二、Java线程同步机制

可以在语言级支持多线程是Java语言的一大优势,这种支持主要集中在同步上,或调节多个线程的活动和共享数据。Java所使用的同步机制是监视器。

1、监视器

Java中的监视器支持两种线程:互斥和协作。Java虚拟机通过对象锁来实现互斥,允许多个线程在同一个共享数据上独立而互不干扰地工作。协作则是通过Object类的wait和notify方法来实现,允许多个线程为了同一个目标而工作。

Java虚拟机中的监视器模型如下图所示,将监视器分成了三个区域。中间的大方框包括一个单独的线程,是监视器的持有者;左边小的方框中是入口区;右边另一个小方框式等待区。

图中显示了线程与监视器交互所必需“通过”的几道门。当一个线程到达监视区域的开始处时,它会通过最左边的1号门进入监视器。如果没有任何线程正持有监视器,也没有其他线程正在入口区等待,这个线程就会立刻通过2号门,从而持有监视器。作为这个监视器的持有者,它将继续执行监视区域中的代码。或者也可能出现另一种情况,已经又一个线程正持有监视器,这个新到达的线程就必须在入口区中等待。

图中有3个线程在入口区中暂停,4个线程在等待区中暂停,这些线程会一直在那儿,直到监视器当前的持有者释放监视器。活动线程会通过两条途径释放监视器:完成它正在执行的监视区域或者执行等待命令。

如果上一个监视器的持有者在它释放监视器前没有执行唤醒命令(同时在此之前也没有任何等待线程被唤醒并等待唤醒,那么位于入口区中的那些线程就会竞争获得监视器。如果上一个持有者执行了唤醒命令,入口区中的线程就不得不与等待区中的一个或多个线程来竞争。如果入口区中的一个线程在竞争中获胜,它就会通过2号门,从而成为监视器新的持有者。而如果是等待区中的某个线程赢了,它会通过4号门退出等待区并重新获得监视器。

2、对象锁

在Java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的。对于对象来说,相关联的监视器保护的是对象的实例变量。对于类来说,监视器保护类的类变量。

为了实现监视器的排他性监视能力Java虚拟机为每一个对象和类都关联一个锁。一个锁就像一种任何时候都只允许一个线程“拥有”的特权。线程访问实例变量或者类变量不需要获取锁。但是如果线程获取了锁,那么在它释放这个锁之前,就没有其他线程可以获取同样数据的锁了。(“锁住一个对象”就是获取对象相关联的监视器。)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

whc20011
粉丝 1
博文 52
码字总数 29810
作品 0
朝阳
程序员
私信 提问
进一步理解Java中的线程(下)

要想真正的理解Java并发编程,线程是无论如何都必须要彻底理解的一个重要概念。那么,在开始深入介绍之前,我们先来深入的学习一下线程。前面一个章节中已经介绍过线程的一些基本知识,包括线...

HollisChuang's Blog
2018/12/22
0
0
【死磕Java并发】—– 死磕 Java 并发精品合集

【死磕 Java 并发】系列是 LZ 在 2017 年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览。 先来一个总览图: 【高清图,请关注“Java技术驿站”公众号,回复:脑...

chenssy
2018/07/22
0
0
基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存、CPU、缓存等予以说明。实际上,在实...

leoliu168
2018/11/08
0
0
从Java到JVM到OS线程睡眠

前言 Java 中有时需要将线程进入睡眠状态,这时一般我们就会通过使线程进入睡眠状态,接下去就看看执行该语句在 JVM 中做了什么。 简单例子 以下是一个简单的例子,使主线程睡眠5秒钟。 JVM ...

超人汪小建
2018/08/20
0
0
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
8

没有更多内容

加载失败,请刷新页面

加载更多

计算机网络

计算机网络体系结构 OSI 其中表示层和会话层用途如下: 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。 会话层 :建立及管理会话。 五层...

一只小青蛙
今天
2
0
0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
2
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部