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

java clinit 死锁

 
阅读更多
public class StaticInit {
	public static void main(String[] arg) {
		Thread th1 = new Thread(new Runnable() {
			public void run() {
				System.out.println(B.bStr);
			}
		}, "call-bStr");

		Thread th2 = new Thread(new Runnable() {
			public void run() {
				System.out.println(C.cStr);
			}
		}, "call-cStr");
		th1.start();
		th2.start();
	}
}

class B {
	static {
		try {
			System.out.println("Binit start");
			Thread.sleep(1000);
		} catch (InterruptedException ex) {
		}
		System.out.println("b->cStr " + C.cStr);
	}
	static String bStr = "bStr";
}

class C {
	static {
		try {
			System.out.println("Cinit start");
			Thread.sleep(1000);
		} catch (InterruptedException ex) {
		}
		System.out.println("c->b.bStr " + B.bStr);
	}
	static String cStr = "cStr";
}

 

"call-cStr" prio=6 tid=0x0257cc00 nid=0x18a4 in Object.wait() [0x04c3f000]
   java.lang.Thread.State: RUNNABLE
    at C.<clinit>(StaticInit.java:40)
    at StaticInit$2.run(StaticInit.java:13)
    at java.lang.Thread.run(Thread.java:662)

"call-bStr" prio=6 tid=0x0257a400 nid=0x1ddc in Object.wait() [0x04baf000]
   java.lang.Thread.State: RUNNABLE
    at B.<clinit>(StaticInit.java:28)
    at StaticInit$1.run(StaticInit.java:7)
    at java.lang.Thread.run(Thread.java:662)

 

分享到:
评论

相关推荐

    java深度历险--学习深入了解java的好书

    《Java深度历险》是一本深入探讨Java技术的书籍,旨在帮助读者理解Java的内在机制,包括JVM(Java虚拟机)、JDK(Java开发工具包)和JRE(Java运行环境)之间的关系,以及类加载的过程等核心概念。通过这本书,你...

    java深度历险java底层

    了解线程的生命周期、同步机制(synchronized、wait/notify、Lock接口等)以及死锁、活锁和饥饿现象,有助于编写高效、安全的并发代码。 8. **反射机制**: Java反射API允许在运行时检查类、接口、字段和方法的...

    Java虚拟机讲义

    5. 初始化:执行类构造器(&lt;clinit&gt;)方法。 四、JVM调优 1. 参数调整:如-Xms和-Xmx设置堆大小,-XX:NewRatio调整新生代和老年代比例,-XX:SurvivorRatio设置Survivor空间比例。 2. 垃圾收集器选择:如CMS(并发...

    JVM 学习笔记(Java虚拟机)

    - 并发与多线程:理解锁的原理,使用并发容器,避免死锁和活锁。 6. **JVM调优工具** - JConsole:监控JVM状态,包括内存、线程、类加载等。 - VisualVM:提供更详细的性能分析,如CPU、内存、线程和方法耗时。 ...

    java经典面试题

    - 初始化:执行类的初始化方法 `&lt;clinit&gt;()`。 10. **双亲委派模型**: - Bootstrap ClassLoader:加载 Java 运行时核心类库。 - Extension ClassLoader:加载扩展类库。 - Application ClassLoader:加载用户...

    java最新面试宝典

    - 初始化阶段:执行类构造器`&lt;clinit&gt;()`。 - **面试考察要点:** - 类加载器的种类及其工作原理。 - 双亲委派模型的意义。 **3.2 对象的创建过程** - **知识点概述:** - 分配内存。 - 初始化对象。 - 设置...

    java面试题总结

    - 初始化:执行类构造器`&lt;clinit&gt;`方法,完成类的初始化。 #### 数据结构 **1. 数组和链表的区别?** - **数组:** - 在内存中连续存储元素。 - 支持随机访问,访问速度快。 - 插入和删除操作需要移动大量...

    Java八股文之JVM与多线程

    线程安全问题(如死锁、活锁、饥饿等)需要谨慎处理,合理使用并发工具类如Semaphore、CountDownLatch、CyclicBarrier等。 8. **线程池**: Java的ExecutorService和ThreadPoolExecutor提供了线程池管理,可以有效...

    java就业培训教程(个人整理)

    - **初始化**:执行类的构造器&lt;clinit&gt;()方法。 - **1.7 垃圾回收器**: - **概念**:自动管理内存,释放不再使用的对象所占用的空间。 - **机制**:标记-清除算法、复制算法、分代收集等。 - **触发条件**:堆...

    Java面试需要掌握的JVM知识

    - **初始化**:执行类的初始化方法&lt;clinit&gt;()。 4. **垃圾收集** - **GC Roots**:垃圾收集的起点,包括全局变量、静态变量、活动线程、JNI引用等。 - **可达性分析**:通过GC Roots追踪,确定哪些对象是可达的...

    JAVA_JVM面试专题20道.pdf

    - **jstack**:打印线程堆栈信息,用于排查死锁等问题。 - **jconsole**:图形化监控JVM。 - **jhat**:分析堆转储文件。 - **MAT(Memory Analyzer Tool)**:Eclipse的内存分析工具。 10. **类加载过程**: ...

    01-JAVA岗位笔试题(A卷)附答案

    - **初始化**:执行类构造器&lt;clinit&gt;()方法,初始化静态变量和执行静态代码块。 #### 二十二、MyBatis底层实现原理 MyBatis是一个优秀的持久层框架,其核心组件和工作原理包括: - **SqlSessionFactory**:创建...

    JVM思维导图.mindnode.zip

    **JVM(Java Virtual Machine)概述** JVM,全称为Java虚拟机,是Java平台的核心组成部分,它负责...以上是JVM的一些核心概念和工作机制,理解这些知识点有助于优化Java应用程序的性能,解决内存溢出、死锁等问题。

    JVM基础-超清文字版.pdf

    - 初始化:执行类的初始化方法(&lt;clinit&gt;)。 4. **垃圾收集与内存管理** - 垃圾收集器(Garbage Collector, GC):自动回收不再使用的对象,避免内存泄漏。 - 分代收集:根据对象生命周期将堆分为新生代、老...

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

    │ 高并发编程第一阶段23讲、多线程死锁分析,案例介绍.mp4 │ 高并发编程第一阶段24讲、线程间通信快速入门,使用wait和notify进行线程间的数据通信.mp4 │ 高并发编程第一阶段25讲、多Produce多Consume之间的...

    JVM 底层原理最全知识总结

    Java 虚拟机(JVM)是 Java 平台的核心组成部分,它是负责运行 Java 字节码的...通过对这些 JVM 底层原理的深入理解,开发者可以更好地进行性能调优,解决内存溢出、死锁等问题,从而提升 Java 应用的稳定性和性能。

    JVM规范

    Java虚拟机(JVM)是Java程序运行的基础,它提供了执行字节码的平台无关环境。JVM规范定义了这个虚拟机如何工作,包括内存管理、类加载...同时,对于解决内存泄漏、线程死锁等问题,深入理解JVM规范也是至关重要的。

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **初始化**:执行类构造器`&lt;clinit&gt;()`方法。 #### 类加载机制 - **双亲委派模型**:由顶层的启动类加载器委托给父类加载器,再由父类加载器委托给子类加载器。 - **自定义类加载器**:可以通过继承`ClassLoader...

    JVM面试专题.zip

    - **初始化(Initialized)**:执行类的初始化方法(&lt;clinit&gt;)。 5. **JVM调优**: - **JVM参数设置**:如-Xms、-Xmx设定堆内存大小,-XX:MaxHeapFreeRatio、-XX:MinHeapFreeRatio调整堆空闲比例。 - **GC调优**...

    面试官常问的JVM面试题

    - **jstack**:查看线程堆栈信息,帮助诊断死锁等问题。 - **jconsole**:GUI工具,监控JVM性能和内存状态。 - **jhat**:分析堆转储文件,找出内存泄漏等问题。 - **MAT(Memory Analyzer Tool)**:Eclipse...

Global site tag (gtag.js) - Google Analytics