0 0

java对象锁的疑问10

jvm说:每个对象都有一个锁,jvm又说:堆中的对象是所有线程共享的,jvm还说:在非同步中,当一个线程访问一个对象时,该线程会自动获得此对象的锁,我的疑问是:既然此线程获得了该对象的锁,那么其他线程在此刻就不能访问此对象了,这不是又成同步问题了吗?非同步中,对象怎么能被多个线程共享吗?小弟愚钝,望大牛们指教
2012年2月28日 10:45

6个答案 按时间排序 按投票排序

0 0

synchronizd 的实例方法是monitorenter this的,类方法是monitorenter this.getClass()的

2012年2月28日 16:55
0 0

怎么说呢,最简单的synchronizd生成monitorenter 和 monitorexit的bytecode,而
这两个bytecode恰好都需要一个引用类型的参数来标明对谁加锁及对谁解锁。假如synchronizd
指定了某对象,那么参数就是这个对象的引用了,假如没有制定,那么按照是类方法还是实例方法
来确定了(class对象与this)。 这样讲下来,“每个对象都有一个锁”也确实是对的。
只是直接来个"每个对象都有锁",太宽泛了,呵呵。

2012年2月28日 16:45
0 0

堆中的对象是所有线程共享的,每个对象都有一个锁,当你用synchronized同步对象或者代码块时,相当于lock.lock(),加了把锁,其他线程这时候就无法访问,每个线程都能获得这个对象的锁,但是不代表所有线程都会去执行这个lock()方法。
对象要被多线程共享很简单,final的就可以被共享了,同步的问题在于改变对象的状态,不改变就没问题,要改变就要加锁,synchronized,ReentrantLock都可以。
不想加锁就给每个线程复制一份要共享的对象,ThreadLocal可以解决的。

2012年2月28日 16:43
0 0

“jvm说:每个对象都有一个锁”也是对的

2012年2月28日 16:26
0 0

那么多JVM说中,只有“jvm又说:堆中的对象是所有线程共享的”是对的

2012年2月28日 16:23
0 0

"在非同步中,当一个线程访问一个对象时,该线程会自动获得此对象的锁"
好像不是哦,只有用synchronized(obj){}里面或对象的synchronized 方法里面执行的代码才会获得对象的锁,普通的对象访问不会获得锁吧

2012年2月28日 11:18

相关推荐

    Java初学者问题图解(动力节点Java学院整理)

    7. **Java对象在堆中的内存结构**:在Java中,对象实例通常存储在堆内存中,而方法和局部变量(包括引用和基本类型)存储在栈内存中。然而,特定情况(如栈上分配、字符串常量池、静态变量等)可能会导致不同。 8. ...

    Java实验报告及源码

    7. **多线程**:Java支持并发编程,通过Thread类和Runnable接口实现,报告可能探讨了线程同步、互斥锁、线程池等概念。 8. **泛型**:泛型提供了一种在编译时检查类型安全的方式,报告可能会有泛型类、泛型方法的...

    java面试常见基础(深层次,高级研发)

    ##### 2.3 疑问解答 Q: 年轻代和年老代之间如何交换对象? A: 通过Minor GC(年轻代垃圾回收)将Eden区的对象移到Survivor区,多次Minor GC后,对象可能会被提升到年老代。 ##### 2.4 垃圾回收器选择 - **串行...

    Java-Interview:此项目为 Java 面试的汇总,多数是一些 Java 基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题

    如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 ...

    Java-Interview:https

    如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock ...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲下(让锁具备超时功能).mp4 │ 高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │ 高并发编程第一阶段32讲、如何捕获...

    java-interview

    如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 ...

    面试官,别挂电话,Synchronized,我还能说上半小时。

    总的来说,Synchronized是Java中实现线程同步的重要工具,其背后的锁机制包括对象锁、类锁以及锁的状态转换等复杂细节,理解这些原理对于优化并发代码和排查多线程问题具有重要意义。因此,面试官,如果你对...

    hibernate文档杂

    6. **对Hibernate的疑问和问题**:`对hibernate的疑问.txt`和`hibernate中奇怪的问题.txt`可能是作者在学习和实践过程中遇到的难点或异常情况,这些问题可能涉及到懒加载(lazy loading)、代理对象、事务管理等复杂...

    一张图读懂Java多线程

     1)竞争对象的锁和竞争CPU资源以及竞争被唤醒  2)何种情况下获取到了锁,何种情况下会释放锁  2、还是那张图  3、详细图解  1)Thread t = new Thread(),初始化一个线程,实际上是一个普通对象,...

    linux jdk1.7.064位

    - **多释放锁**:允许多个线程同时持有同一个对象的锁。 - **JShell**:提供了一个交互式的命令行工具,支持即时执行 Java 代码片段。 - **类型注解**:增强了类型系统,允许开发者在类型级别添加元数据。 - **资源...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲下(让锁具备超时功能).mp4 │ 高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │ 高并发编程第一阶段32讲、如何捕获...

    小小聊天程序代码——首次运行客户端可以向服务端发信息,不知道为什么之后相互就不能发信息了

    成功连接后,客户端可以通过`Socket`对象的`getOutputStream()`和`getInputStream()`方法来发送和接收数据。 问题在于,首次连接后,客户端与服务端之间的通信就停止了。这可能是由于以下原因: 1. **资源管理不当...

    二十三种设计模式【PDF版】

    所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...

    ao-concurrent:并发编程实用程序

    - **并发控制**:Java提供了多种并发控制机制,如`synchronized`关键字、`volatile`变量、`java.util.concurrent`包中的锁和同步工具类。 2. **Java并发API** - **ExecutorService**:管理线程池,提供线程的创建...

    求职宝典 - 面试大全

    1. **基础知识**:包括语法、面向对象设计原则(如封装、继承、多态)、异常处理、集合框架(如ArrayList、LinkedList、HashMap、HashSet等)。 2. **JVM原理**:理解类加载机制、内存模型(堆、栈、方法区、本地...

    Netty案例集锦(并发编程篇)有目录

    Netty4ChannelHandler线程安全疑问 ##### 6.1 问题咨询 关于`ChannelHandler`在多线程环境下的线程安全性问题。 ##### 6.2 解答 `ChannelHandler`默认不是线程安全的,因此需要确保在更新状态或共享资源时采取...

    Python使用functools实现注解同步方法

    文章中给出了一个完整的示例MyWorker类,其中定义了一个锁对象和三个使用了@synchronized装饰器的方法。这三个方法test1、test2、test3相互间是同步执行的,它们分别执行一个简单的递增操作,并在每次操作后等待一秒...

    oracle原厂培训笔记

    - **Q&A**: 课程期间设有问答环节,学员可以提出疑问并得到解答。 #### 三、Oracle产品与技术概述 - **Oracle 10g**: “g”代表“grid”,表明Oracle 10g支持网格计算技术。 - **Oracle Grid Computing Forum (GCF)...

Global site tag (gtag.js) - Google Analytics