`

第17章 线程和锁

阅读更多

工作之余翻译oracle官方的Java Language Specification,今天翻译第17,线程和锁。原文地址:http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html

 

Chapter 17. Threads and Locks

在前几章我们大多时候关注的是在单条语句或表达式在一个时间点的执行状态,换句话说,就是单线程。JAVA虚拟机能支持许多线程同时执行。这些线程独立的执行代码和操作共享内存的值和对象。线程支持在有许多硬件处理器,单一硬件处理器上的时间分片,多硬件处理器的时间分片等环境。

        Thread类代表线程。用户创建线程的唯一方法是创建这个类的对象。每个线程关联一个对象。这个线程对应的Thread对象的start()方法被调用时该线程将要启动。

     线程的行为是不可预支的,特别是没有正确的同步时。本章重要描述多线程的语义。他包括哪些值在被多线程更新时通过共享内存其他线程可见的规则。对规范来说,不同的硬件的内存模型是相似的。这些语义JAVA程序语言模型所知,当没有混乱出现,我们就可以简单的参考内存模型。

      这些语义没有规定多线程程序应该被怎样执行。多线程的行为描述是可以被展示的。任何执行策略只能产生一种被接受的执行策略。

       

17.1. Synchronization

JAVA程序语言提供多种线程通信机制。大多数基本的是这些方法是synchronization(同步的),采用monitors实现。每个JAVA对象会关联一个monitor,一个线程可以锁和解锁。一个线程可以锁一个指定的监视器多次。每次解锁抵消一次加锁带来的影响。         

         Synchronized语句估算一个对象的引用。然后在这对象的监视器上试途完成一个锁动作,否则不处理直到锁动作能成功的完成。加锁动作完成后,synchronized语句块内的语句被执行。如果语句体被正常执行或者中断,一个解锁动作在这个监视器上自动完成。

    一个同步方法在执行时会自动执行一个加锁动作。方法体不允许被执行直接加锁动作成功完成。如果该方法是一个实例方法,这个锁所在监视器是被调用的这个实例对象的监视器(这个对象在方法体执行期间被标识为this).如果方法是静态的,这个锁监视器被关联到这个方法所在类对象上。执行方法体自然或者中断,一个解锁动作会在该监视器上执行。

    JAVA语言不阻止也不需要发现死锁。程序在持有多个对象锁时应该用传统的方法来避免死锁。如果需要可以创建更高等级的私有锁。

    其他机制,比如读写一个volatile变量和用 java.util.concurrent 包下的类。提供可选的同步方法。   

17.2. Wait Sets and Notification

         每个对象除了关联了一个监视器之外,还关联了一个等候区。等候集合是一个线程集合。

         对象首次创建时,等候区是空的。他的动作元素包含原子的增加和移除线程。等候区的操作只能通过以下方法:Object.wait,Object.notify,Object.notifyAll

         等候区的操作也会影响一个线和的中断状态。

 

分享到:
评论

相关推荐

    linux多线程编程

    七、线程堆栈的大小 17 八、线程堆栈的地址 18 九、线程栈末尾的警戒缓冲区大小 18 第三章 Posix有名信号灯 19 一、posix有名信号灯函数 19 二、关于posix有名信号灯使用的几点注意 24 三、posix有名信号灯应用于多...

    linux系统下多线程编程文档资料

    七、线程堆栈的大小 17 八、线程堆栈的地址 18 九、线程栈末尾的警戒缓冲区大小 18 第三章 Posix有名信号灯 19 一、posix有名信号灯函数 19 二、关于posix有名信号灯使用的几点注意 24 三、posix有名信号灯应用于多...

    java面经 Linux 系统 数据结构 设计模式 快速入门

    里面共有14章,第一章基础,第二章集合类,第三章锁,第四章多线程,第五章ssh/ssm框架,第六章内存和垃圾回收,第七章juc包,第八章数据库,第九章网络,第十章操作系统,第十一章Linux,第十二章代码,第十三章...

    UNIX网络编程卷2进程间通信(第2版)

    第17章 ioctl操作 第18章 路由套接口 第19章 密钥管理套接口? 第20章 广播 第21章 多播 第22章 高级UDP套接口编程 第23章 高级SCTP套接口编程 第24章 带外数据 第25章 信号驱动I/O 第26章 线程? 第27章 IP选项 第28...

    Java 7并发编程实战手册

    第1章 线程管理 1 1.1 简介 1 1.2 线程的创建和运行 2 1.3 线程信息的获取和设置 5 1.4 线程的中断 9 1.5 线程中断的控制 11 1.6 线程的休眠和恢复 15 1.7 等待线程的终止 17 1.8 守护线程...

    Java开发详解.zip

    031709_【第17章:Java数据库编程】_处理大数据对象(2)—处理BLOB数据笔记.pdf 031710_【第17章:Java数据库编程】_CallableStatement接口笔记.pdf 031711_【第17章:Java数据库编程】_JDBC 2.0操作笔记.pdf ...

    UNIX环境高级编程_第二版中文

    第17章 高级进程间通信  17.1 引言  17.2 基于STREAMS的管道  17.2.1 命名的STREAMS管道  17.2.2 唯一连接  17.3 UNIX域套接字  17.3.1 命名UNIX域套接字  17.3.2 唯一连接  17.4 传送文件描述符 ...

    Linux多线程服务端编程:使用muduo C++网络库

    2.3不要用读写锁和信号量. . . . . . . . . . . . . . . . .. . . . . . . . . . . 43 2.4封装MutexLock、MutexLockGuard、Condition. . . . . . . . . . . . . . 44 2.5线程安全的Singleton 实现.. . . . . . . . ....

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     第七章 UDF数据报  7.1 UDP数据报的概述  7.2 UDP通信的过程  7.3 UDP的服务器和TCP服务器的比较  7.4 UDP的“连接”  7.5 应用示例  本章小结  第八章 域名系统和通用套接字选项  8.1 域名...

    Java并发编程实战

    第2章 线程安全性11 2.1 什么是线程安全性13 2.2 原子性14 2.2.1 竞态条件15 2.2.2 示例:延迟初始化中的竞态条件16 2.2.3 复合操作17 2.3 加锁机制18 2.3.1 内置锁20 2.3.2 重入21 2.4 用锁来保护状态22 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第17章 01 课前吹牛 02 zip方法 03 max和min高级使用 04 其他内置函数 05 文件操作的其他模式 第18章 01 上节课复习 02 文件处理b模式 03 文件操作的其他方法 04 文件seek方法补充 05 迭代器协议和for循环工作...

    Python 核心编程 第二版

     第17章 网络客户端编程   17.1 什么是因特网客户端   17.2 文件传输   17.3 网络新闻   17.4 电子邮件   17.5 相关模块   17.6 练习   第18章 多线程编程   18.1 引言/动机   18.2 ...

    UNIX环境高级编程(第二版中文)

    第17章 高级进程间通信 469 17.1 引言 469 17.2 基于STREAMS的管道 469 17.2.1 命名的STREAMS管道 472 17.2.2 唯一连接 473 17.3 UNIX域套接字 476 17.3.1 命名UNIX域套接字 477 17.3.2 唯一连接 ...

    linux programming instances网络编程教程 附源代码

    全书由13章组成,内容涉及到Lindx系统编程基础、TCP/UDP协议、套接字编程概念及I/O模型、高级编程中需要用到的进程问通信同步、多路复用、多线程编程和一些高级套接字控制方法、IPv6介绍以及网络安全等。...

    UNIX环境高级编程

    第17章 高级进程间通信 469 17.1 引言 469 17.2 基于STREAMS的管道 469 17.2.1 命名的STREAMS管道 472 17.2.2 唯一连接 473 17.3 UNIX域套接字 476 17.3.1 命名UNIX域套接字 477 17.3.2 唯一连接 ...

    unix环境编程电子书

    452 16.6 套接字选项 464 16.7 带外数据 466 16.8 非阻塞和异步I/O 467 16.9 小结 468 习题 468 第17章 高级进程间通信 469 17.1 引言 469 17.2 基于STREAMS的管道 469 17.2.1 命名的STREAMS管道 ...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    第17章 中断程序流程并处理事件 299 17.1 声明和使用委托 299 17.1.1 自动化工厂的例子 300 17.1.2 不使用委托来实现工厂 300 17.1.3 使用委托来实现工厂 301 17.1.4 使用委托 303 17.2 lambda表达式和委托 ...

Global site tag (gtag.js) - Google Analytics