运行Java: java -Xms100M -Xmx200M HelloWorld; 运行java程序时,手动分配内存的最大值和最小值,可以优化垃圾回收。
故障诊断:死锁(安装ThreadDump,可以定位产生死锁的位置信息)
Demo.java:
package cn.xxx.demo;
public class Demo {
public static void main(String[] args) {
DeadLock dead = new DeadLock();
Thread t0 = new Thread(dead); // 创建线程
Thread t1 = new Thread(dead);
t0.start(); // 开启线程
t1.start();
}
}
DeadLock.java(线程类,实现Runnable接口,重写run方法):
package cn.xxx.demo;
public class DeadLock implements Runnable{ // 实现Runnable接口
private int i = 0;
public void run(){ // 重写run方法
while(true){
if(i%2==0){
//先进入A同步,再进入B同步
synchronized(LockA.locka){ // 同步
System.out.println("我拿到了资源A,还需要资源B");
synchronized(LockB.lockb){ // 同步嵌套
System.out.println("我也拿到了资源B,可以开始执行任务了");
}
}
}else{
//先进入B同步,再进入A同步
synchronized(LockB.lockb){ // 同步
System.out.println("我拿到了资源B,还需要资源A");
synchronized(LockA.locka){ // 同步嵌套
System.out.println("我也拿到了资源A,可以开始执行任务了");
}
}
}
i++;
}
}
}
LockA.java(对象锁A):
package cn.xxx.demo;
public class LockA {
private LockA(){}
public static final LockA locka = new LockA();
}
LockB.java(对象锁B):
package cn.xxx.demo;
public class LockB {
private LockB(){}
public static final LockB lockb = new LockB();
}
版权声明:本文为houyanhua1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。