`
annan211
  • 浏览: 456572 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 多线程的锁消除

 
阅读更多
Java 中使用同步 来保证数据的安全性,但是对于一些明显不会产生竞争的情况下,Jvm会根据现实执行情况对代码进行锁消除以提高执行效率。
比如下面一段代码

 package thread;

public class SynchronizedDemo {

	public void fuck(){
		DataDemo demo = new DataDemo();
		demo.add();
	}

}

class DataDemo {

	private int data;

	public synchronized void add(){
		data++;
	}

	public int  get(){
		return data;
	}
}



add 方法 使用synchronized 来实现同步 这是正确的,但是由于DataDemo对象是创建在方法内部的,并不影响其他线程的执行,所以虚拟机认为这里并不需要synchronized 来限制,所以就会执行锁消除。 StringBuffer 是线程安全的,但是如果StringBuffer的对象定义在局部方法里,也是会被虚拟机进行锁消除的。
分享到:
评论

相关推荐

    一线大厂Java多线程面试120题.pdf

    Java多线程是Java开发中的核心技能之一,尤其在面试中,对于一线大厂的面试者来说,深入理解和掌握多线程的相关知识点至关重要。以下是一些关键的Java多线程面试知识点: 1. **自旋锁**:自旋锁是一种等待机制,当...

    彻底理解Java中的各种锁.pdf

    Java是一种广泛使用的编程语言,它在处理多线程环境下的数据同步和并发控制时,提供了多种锁机制来保证数据的一致性和线程的安全。本文将详细介绍Java中包括乐观锁、悲观锁、自旋锁、可重入锁、读写锁等多种锁机制的...

    4初学Java多线程:线程的生命周期.pdf

    在探讨Java多线程和线程生命周期时,我们首先应该明确,Java多线程是Java语言支持并发编程的一个重要特性,其允许同时执行多个任务,以提高程序的执行效率和改善用户体验。Java中的每个线程都有自己的生命周期,由一...

    Java多线程中使用synchronized说明

    在Java多线程编程中,`synchronized`有多种用法,包括修饰实例方法、静态方法以及作为代码块来锁定特定的对象引用。 1. **修饰实例方法**: 当`synchronized`关键字用于实例方法时,它会对该实例对象加锁。这意味...

    基于同步机制解决Java多线程安全问题的应用 (1).zip

    Java多线程编程是开发高性能、高并发应用的关键技术之一,但随之而来的是线程安全问题。本主题将深入探讨如何利用同步机制来确保在Java环境中多线程操作的正确性和一致性。 一、线程安全问题 在多线程环境下,当多...

    Java并发篇乐观锁,悲观锁,自旋锁

    - **锁消除**:编译器自动检测无锁化的可能,消除不必要的锁。 7. **线程**: - **线程方法**:wait()使线程进入WAITING状态,释放对象锁;sleep()使线程进入TIMED_WAITING状态,不释放锁;yield()让当前线程让出...

    高并发多线程面试专题及答案(上).pdf

    以上内容涵盖了Java中高并发和多线程面试可能遇到的问题,包括Synchronized关键字的使用、原理、锁定对象、可重入性、JVM对锁的优化、Synchronized的公平性和非公平性、以及锁消除和锁粗化的概念。掌握这些知识点...

    基于Java的实例源码-多线程程序死锁检查 JCarder.zip

    `JCarder`是一个用于检查Java多线程程序中死锁的工具,它可以帮助开发者识别并解决这类问题。 首先,我们需要理解死锁的基本概念。在操作系统或并发编程中,死锁是指四个必要条件同时满足时发生的情况: 1. 互斥...

    提升Java的锁性能Java开发Java经验技巧共5页.p

    高效的锁机制能够确保多线程环境中的数据一致性,减少资源争抢,从而提高应用程序的性能。本篇内容将深入探讨如何提升Java的锁性能,结合Java开发的经验技巧,帮助开发者优化并发代码。 1. **了解锁的类型** - **...

    来吧!再谈多线程(详细).doc

    了解了这些基础概念后,我们还可以深入研究更多 Java 多线程的高级特性,如 CountDownLatch、CyclicBarrier、Semaphore 和 ExecutorService 等工具类,它们能帮助我们更好地管理和协调线程,实现更复杂的并发控制...

    java集合类线程安全.doc

    为了消除线程干扰的可能性,客户端对象在调用这类方法的过程中需要获得该集合类对象的锁来进行同步。 4. 线程兼容:对其对象实例的所有方法调用都通过外部同步之后再进行,线程兼容类可以安全的并发使用。 5. 线程不...

    java进阶提高学习教程-14锁机制.pptx

    在 Java 中,锁有多种不同的实现机制,如可重入锁、读写锁、互斥锁、悲观锁、乐观锁、公平锁、锁消除、独享锁、共享锁等。 可重入锁 可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍然...

    Java多线程与并发-原理

    Java多线程与并发是构建高性能、高可用系统的关键技术之一。在Java中,`synchronized`关键字用于实现线程间的同步,确保并发环境下的数据一致性。本文将深入探讨`synchronized`的工作原理、实现机制以及与其他并发...

    多线程并发编程在Netty中的应用分析

    #### JAVA内存模型与多线程编程 ##### 1.1. 硬件的发展和多任务处理 随着硬件技术的不断进步,尤其是多核处理器的普及及其成本的降低,现代操作系统几乎都具备了支持多任务处理的能力。这种能力不仅仅是为了利用...

    Java语言程序设计实验指导电子教案第08章PPT学习教案.pptx

    而在Java多线程环境下,一个线程的阻塞不会影响其他线程的运行,从而实现了程序的并发执行。 Java线程的状态包括运行(running)、挂起(suspended)、恢复(resumed)、阻塞(blocked)和终止(terminated)。线程...

    详解Java的线程的优先级以及死锁

    Java线程的优先级是Java多线程编程中不可或缺的一部分,它允许开发者为不同线程分配不同的执行优先级,以期望某些线程能更快地获取CPU时间片,从而提高程序性能。Java线程的优先级范围从1(Thread.MIN_PRIORITY)到...

    Java并发体系.pdf

    JMM规定了线程如何访问和修改共享数据,以确保多线程环境下的正确性和一致性。为了优化程序性能,处理器和编译器可能会进行重排序,但这可能导致数据在多线程环境中的不安全性。JMM提供了一种叫做“顺序一致性”的...

    java IBM 分析工具(线程、gc、内存)

    这是一个专门用于解析Java线程和监视器转储的工具,它能够帮助开发者识别和解决多线程应用程序中的死锁、阻塞和其他并发问题。该工具可以分析线程堆栈信息,展示每个线程的状态,包括运行、等待、阻塞等,并提供详细...

Global site tag (gtag.js) - Google Analytics