package com.cavaness.quartzbook.chapter3;
/**
* 死锁问题
*
* 开始两个线程,一个线程调用同步代码块,另外一个调用同步函数
*
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
TestThread testThread = new TestThread();
new Thread(testThread).start(); // 此线程调用同步代码块
try { // 立即让第一个线程去执行run方法
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
throw e;
}
testThread.setWay("method");
new Thread(testThread).start();
}
}
package com.cavaness.quartzbook.chapter3;
public class TestThread implements Runnable {
private String string = "";
private String way = "";
public void setWay(String way) {
this.way = way;
}
@Override
public void run() {
if (way.equals("")) { // 执行同步代码块的线程
while (true) {
synchronized (string) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) {
}
System.out.println("同步代码块");
}
}
} else {// 执行同步函数的线程
while (true) {
try {
sale();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private synchronized void sale() throws InterruptedException {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
throw e;
}
synchronized (string) {
}
System.out.println("同步函数");
}
}