`
jackyhongvip
  • 浏览: 159213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java多线程同步如何从JVM的角度体会

    博客分类:
  • j2se
 
阅读更多

我们在使用Java多线程同步的时候需要了解很多的知识,其中Java多线程同步机制实际上是靠锁的概念来控制的。这个问题就需要我们引起注意,那么在Java程序当中,锁是如何体现的呢?

  让我们从JVM的角度来看看锁这个概念:

 

  在Java程序运行时环境中,JVM需要对两类线程共享的数据进行协调:

 

  1)保存在堆中的实例变量

 

  2)保存在方法区中的类变量

 

  这两类数据是被所有线程共享的。(程序不需要协调保存在Java 栈当中的数据。因为这些数据是属于拥有该栈的线程所私有的。)

 

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

 

  (如果一个对象没有实例变量,或者一个类没有变量,相关联的监视器就什么也不监视。)

 

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

 

  类锁实际上用对象锁来实现。当虚拟机装载一个class文件的时候,它就会创建一个java.lang.Class类的实例。当锁住一个对象的时候,实际上锁住的是那个类的Class对象。

 

  一个线程可以多次对同一个对象上锁。对于每一个对象,java虚拟机维护一个加锁计数器,线程每获得一次该对象,计数器就加1,每释放一次,计数器就减 1,当计数器值为0时,锁就被完全释放了。

 

  java多线程同步不需要自己动手加锁,对象锁是java虚拟机内部使用的。在java程序中,只需要使用synchronized块或者synchronized方法就可以标志一个监视区域。当每次进入一个监视区域时,java 虚拟机都会自动锁上对象或者类。

 

  看到这里,我想你们一定都疲劳了吧?当一个有限的资源被多个线程共享的时候,为了保证对共享资源的互斥访问,我们一定要给他们排出一个先来后到。而要做到这一点,对象锁在这里起着非常重要的作用。

 

分享到:
评论

相关推荐

    基于Java多线程同步的安全性研究.pdf

    "基于Java多线程同步的安全性研究" 本文主要研究了基于Java多线程同步的安全性问题,讨论了Java多线程同步机制的实现方法和安全性问题的解决方法。文章首先介绍了Java多线程同步的必要性和重要性,然后讨论了Java多...

    java 多线程同步

    Java多线程同步是Java编程中关键的并发概念,它涉及到如何在多个线程访问共享资源时保持数据的一致性和完整性。`java.util.concurrent`包是Java提供的一个强大的并发工具库,它为开发者提供了多种线程安全的工具,...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    JAVA多线程编程技术PDF

    这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点。 首先,多线程的核心概念包括线程的创建与启动。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。创建后...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java多线程同步问题的探究.pdf

    总之,Java多线程同步问题的探究是一个复杂而深入的话题,涉及了synchronized关键字、JDK 5的高级锁机制、ThreadLocal的线程局部存储以及JVM的线程管理等多个方面。了解这些知识点,对于深入理解Java多线程编程和...

    java 多线程示例

    Java多线程是Java编程中的重要概念,尤其在开发高性能、高并发的应用中不可或缺。本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要...

    Java_多线程与并发编程总结.doc

    Java多线程与并发编程是Java开发中至关重要的一部分,它涉及到如何高效地利用CPU资源,以实现程序的并行执行。在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现方式。Java作为一种广泛应用于分布式系统开发的编程语言,其内部...

    java多线程.pdf

    ### Java多线程知识点详解 #### 一、Java多线程概述 **Java多线程**是指在Java程序中能够同时执行多个线程的技术。这种技术使得程序可以在多个任务之间并发执行,从而提高了程序的效率和资源利用率。本文将根据...

    java多线程之赛马程序实验8多线程练习下载进度

    本实验"java多线程之赛马程序实验8多线程练习下载进度"聚焦于如何利用多线程来模拟实际场景中的下载进度显示。在这一过程中,我们将探讨Thread类的`run`和`start`方法,以及如何通过进度条来可视化表示下载过程。 ...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...

    深入学习:Java多线程编程

    《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...

    Java多线程同步问题分析.pdf

    Java多线程同步问题分析主要关注的是在并发环境中如何有效地管理共享资源,避免出现数据竞争和不一致性。在Java编程中,多线程是提升程序性能的重要手段,尤其是在服务器端应用和服务中。然而,当多个线程同时访问并...

    架构师学习线路图,详细介绍java学习线路图,包括java多线程并发,JVM,spring,springboot,s.zip

    1. **Java多线程并发**:在Java中,多线程并发是性能优化的关键。它允许程序同时执行多个任务,提高系统的资源利用率。Java提供了多种创建和管理线程的方式,如Thread类、Runnable接口、Executor框架等。理解线程...

    java 多线程.ppt,多线程

    Java多线程是Java编程中一个重要的概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要分为两种实现方式:通过子类化Thread类和实现Runnable接口。 1. 子类化Thread类: 当...

    Java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...

    Java多线程同步机制在网络售票系统中的应用.pdf

    总结来说,Java多线程同步机制在网络售票系统中的应用,可以有效地解决并发访问共享资源的问题,保证数据的一致性和准确性。通过使用synchronized关键字,可以有效地控制对共享资源的访问,从而提高网络售票系统的...

Global site tag (gtag.js) - Google Analytics