-
java对象锁的疑问10
jvm说:每个对象都有一个锁,jvm又说:堆中的对象是所有线程共享的,jvm还说:在非同步中,当一个线程访问一个对象时,该线程会自动获得此对象的锁,我的疑问是:既然此线程获得了该对象的锁,那么其他线程在此刻就不能访问此对象了,这不是又成同步问题了吗?非同步中,对象怎么能被多个线程共享吗?小弟愚钝,望大牛们指教2012年2月28日 10:45
6个答案 按时间排序 按投票排序
-
synchronizd 的实例方法是monitorenter this的,类方法是monitorenter this.getClass()的
2012年2月28日 16:55
-
怎么说呢,最简单的synchronizd生成monitorenter 和 monitorexit的bytecode,而
这两个bytecode恰好都需要一个引用类型的参数来标明对谁加锁及对谁解锁。假如synchronizd
指定了某对象,那么参数就是这个对象的引用了,假如没有制定,那么按照是类方法还是实例方法
来确定了(class对象与this)。 这样讲下来,“每个对象都有一个锁”也确实是对的。
只是直接来个"每个对象都有锁",太宽泛了,呵呵。2012年2月28日 16:45
-
堆中的对象是所有线程共享的,每个对象都有一个锁,当你用synchronized同步对象或者代码块时,相当于lock.lock(),加了把锁,其他线程这时候就无法访问,每个线程都能获得这个对象的锁,但是不代表所有线程都会去执行这个lock()方法。
对象要被多线程共享很简单,final的就可以被共享了,同步的问题在于改变对象的状态,不改变就没问题,要改变就要加锁,synchronized,ReentrantLock都可以。
不想加锁就给每个线程复制一份要共享的对象,ThreadLocal可以解决的。2012年2月28日 16:43
-
"在非同步中,当一个线程访问一个对象时,该线程会自动获得此对象的锁"
好像不是哦,只有用synchronized(obj){}里面或对象的synchronized 方法里面执行的代码才会获得对象的锁,普通的对象访问不会获得锁吧2012年2月28日 11:18
相关推荐
7. **Java对象在堆中的内存结构**:在Java中,对象实例通常存储在堆内存中,而方法和局部变量(包括引用和基本类型)存储在栈内存中。然而,特定情况(如栈上分配、字符串常量池、静态变量等)可能会导致不同。 8. ...
7. **多线程**:Java支持并发编程,通过Thread类和Runnable接口实现,报告可能探讨了线程同步、互斥锁、线程池等概念。 8. **泛型**:泛型提供了一种在编译时检查类型安全的方式,报告可能会有泛型类、泛型方法的...
##### 2.3 疑问解答 Q: 年轻代和年老代之间如何交换对象? A: 通过Minor GC(年轻代垃圾回收)将Eden区的对象移到Survivor区,多次Minor GC后,对象可能会被提升到年老代。 ##### 2.4 垃圾回收器选择 - **串行...
如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 ...
如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock ...
│ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲下(让锁具备超时功能).mp4 │ 高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │ 高并发编程第一阶段32讲、如何捕获...
如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 ...
总的来说,Synchronized是Java中实现线程同步的重要工具,其背后的锁机制包括对象锁、类锁以及锁的状态转换等复杂细节,理解这些原理对于优化并发代码和排查多线程问题具有重要意义。因此,面试官,如果你对...
6. **对Hibernate的疑问和问题**:`对hibernate的疑问.txt`和`hibernate中奇怪的问题.txt`可能是作者在学习和实践过程中遇到的难点或异常情况,这些问题可能涉及到懒加载(lazy loading)、代理对象、事务管理等复杂...
1)竞争对象的锁和竞争CPU资源以及竞争被唤醒 2)何种情况下获取到了锁,何种情况下会释放锁 2、还是那张图 3、详细图解 1)Thread t = new Thread(),初始化一个线程,实际上是一个普通对象,...
- **多释放锁**:允许多个线程同时持有同一个对象的锁。 - **JShell**:提供了一个交互式的命令行工具,支持即时执行 Java 代码片段。 - **类型注解**:增强了类型系统,允许开发者在类型级别添加元数据。 - **资源...
│ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲下(让锁具备超时功能).mp4 │ 高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │ 高并发编程第一阶段32讲、如何捕获...
成功连接后,客户端可以通过`Socket`对象的`getOutputStream()`和`getInputStream()`方法来发送和接收数据。 问题在于,首次连接后,客户端与服务端之间的通信就停止了。这可能是由于以下原因: 1. **资源管理不当...
所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...
- **并发控制**:Java提供了多种并发控制机制,如`synchronized`关键字、`volatile`变量、`java.util.concurrent`包中的锁和同步工具类。 2. **Java并发API** - **ExecutorService**:管理线程池,提供线程的创建...
1. **基础知识**:包括语法、面向对象设计原则(如封装、继承、多态)、异常处理、集合框架(如ArrayList、LinkedList、HashMap、HashSet等)。 2. **JVM原理**:理解类加载机制、内存模型(堆、栈、方法区、本地...
Netty4ChannelHandler线程安全疑问 ##### 6.1 问题咨询 关于`ChannelHandler`在多线程环境下的线程安全性问题。 ##### 6.2 解答 `ChannelHandler`默认不是线程安全的,因此需要确保在更新状态或共享资源时采取...
文章中给出了一个完整的示例MyWorker类,其中定义了一个锁对象和三个使用了@synchronized装饰器的方法。这三个方法test1、test2、test3相互间是同步执行的,它们分别执行一个简单的递增操作,并在每次操作后等待一秒...
- **Q&A**: 课程期间设有问答环节,学员可以提出疑问并得到解答。 #### 三、Oracle产品与技术概述 - **Oracle 10g**: “g”代表“grid”,表明Oracle 10g支持网格计算技术。 - **Oracle Grid Computing Forum (GCF)...