`

第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有名信号灯应用于多...

    JAVA高质量并发详解,多线程并发深入讲解

    - **第17章:CountDownLatch的使用** 探讨`CountDownLatch`的用法,以及如何使用它来协调多个线程的执行顺序。 - **第18章:CyclicBarrier的使用** 介绍`CyclicBarrier`的功能,包括其提供的方法及如何使用它来...

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

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

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

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

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

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

    操作系统概念英文第六版课后题参考答案

    - **第十七章 分布式协调**:介绍分布式系统中的协调机制,包括选举算法、分布式锁等。 - **第十八章 保护**:探讨操作系统级别的保护机制,包括访问控制列表、权限验证等。 - **第十九章 安全**:讨论操作系统的...

    JAVA程序设计第七章 实验代码 实验答案

    在本实验中,我们将深入探讨Java程序设计的第七章,这一章主要涵盖了Java编程的高级特性和实践应用。实验代码经过测试,确保了其正确性和可用性,这为我们提供了宝贵的实践经验,有助于提升对Java语言的理解。 一、...

    SylixOS应用开发手册1

    第十七章分析了日志系统,第十八章介绍了多用户管理机制。第十九章讲解了动态装载原理和接口,而第二十章关注电源管理函数。 对于图形界面编程,第二十一章介绍了Qt在SylixOS上的应用及第三方库的移植。最后,第二...

    Visual C++范例大全_15 16 17章

    3. **STL(标准模板库)深入应用**:第17章可能涵盖了STL的高级应用,包括更复杂的容器(如map和set)、算法(如排序和查找)以及迭代器的使用。STL是C++中不可或缺的一部分,它提供了高效的数据结构和算法,极大地...

    SAMS Java Thread Programming.pdf

    7. **第17章:布尔锁工具类**(The Boolean Lock Utility) - 布尔锁工具的基本原理; - 如何使用布尔锁替代传统的同步机制; - 提高代码可读性和维护性的技巧。 8. **第18章:先进先出队列(FIFO)**(First-In...

    C++并发编程实践 C++ Concurrency in Action

    第七章介绍了一种更高级的技术——无锁数据结构的设计方法,这类数据结构不使用传统的锁机制来实现线程安全。 - **CAS操作**:使用比较并交换(Compare-and-Swap)操作来实现无锁算法。 - **无锁队列**:展示了如何...

    Java并发编程原理精讲 视频教程 下载 因为太大 百度网盘链接4.zip

    │ 04 对象锁和类锁.mp4 │ 05 Lock框架之ReentrantLock.mp4 │ 06 可重入锁ReentrantLock的锁定原理.mp4 │ 07 可重入锁ReentrantLock之公平锁.mp4 │ 08 对象条件1.mp4 │ 09 对象条件2.mp4 │ 10 条件对象...

    Java并发编程原理精讲 视频教程 下载 因为太大 百度网盘链接3.zip

    │ 04 对象锁和类锁.mp4 │ 05 Lock框架之ReentrantLock.mp4 │ 06 可重入锁ReentrantLock的锁定原理.mp4 │ 07 可重入锁ReentrantLock之公平锁.mp4 │ 08 对象条件1.mp4 │ 09 对象条件2.mp4 │ 10 条件对象...

    Java并发编程原理精讲 视频教程 下载 因为太大 百度网盘链接1.zip

    │ 04 对象锁和类锁.mp4 │ 05 Lock框架之ReentrantLock.mp4 │ 06 可重入锁ReentrantLock的锁定原理.mp4 │ 07 可重入锁ReentrantLock之公平锁.mp4 │ 08 对象条件1.mp4 │ 09 对象条件2.mp4 │ 10 条件对象...

    Java并发编程原理精讲 视频教程 下载 因为太大 百度网盘链接2.zip

    │ 04 对象锁和类锁.mp4 │ 05 Lock框架之ReentrantLock.mp4 │ 06 可重入锁ReentrantLock的锁定原理.mp4 │ 07 可重入锁ReentrantLock之公平锁.mp4 │ 08 对象条件1.mp4 │ 09 对象条件2.mp4 │ 10 条件对象...

    第17章 驱动开发之字符设备驱动程序

    7. **同步机制**:为了保证多线程环境下对设备访问的安全,驱动程序需要使用锁(如自旋锁spinlock、读写锁rwlock)或其他同步原语。 8. **缓冲区管理**:字符设备驱动可能会涉及缓冲区管理,比如使用`kmalloc`分配...

    C#与.NET.3.5高级程序设计(第4版)16-20章

    **第17章:进程、应用程序域和对象上下文** 这一章深入讨论了.NET中的进程和应用程序域(AppDomain)的概念。进程是操作系统中执行程序的实例,而AppDomain则是.NET框架中的一个安全边界,它提供了隔离执行环境,...

    《LinuxC程序设计大全》第17章文件IO共47页.pd

    《Linux C程序设计大全》第17章主要探讨的是Linux环境下的文件输入/输出(File Input/Output,简称文件IO)技术,这是任何系统编程的基础。在Linux操作系统中,一切皆为文件,包括硬件设备、网络接口等。本章内容...

Global site tag (gtag.js) - Google Analytics