1.死锁示例
public class Main {
public static void main(String[] args) {
Account a = new Account();
Account b = new Account();
Thread t1 = new Thread(new transfer(a, b, 10));
Thread t2 = new Thread(new transfer(b, a, 10));
t1.start();
t2.start();
}
static class transfer extends Thread{
Account from;
Account to;
int amount;
public transfer(Account from, Account to, int amount) {
this.from = from;
this.to = to;
this.amount = amount;
}
@Override
public void run() {
synchronized (from) {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (to) {
from.amount = from.amount - amount;
to.amount = to.amount + amount;
System.out.println("success");
}
}
}
}
static class Account {
int amount;
}
}
2. jps -l 获取进程号
3. jstack -l 进程号
4.或者使用jconsole图形化界面检查死锁