/**
* 在同一个类中,线程资源竞争
*
*/
public class ThreadTest12 implements Runnable {
public static ThreadTest12 test1;
public static ThreadTest12 test2;
public static void main(String[] args) throws InterruptedException {
new Thread(new ThreadTest12()).start();
//new Thread(new ThreadTest12()).start();
/*
1 都是 synchronized (test1)
Thread-0
Thread-1
Thread-0start run1
Thread-0end run1
Thread-1start run2
Thread-1end run2
2 一个是 synchronized (test1) 另一个是 synchronized (test2)
Thread-0
Thread-1
Thread-0start run1
Thread-1start run2
Thread-0end run1
Thread-1end run2
*/
}
public static ThreadTest12 instentce() {
String name = Thread.currentThread().getName();
if ("Thread-0".equals(name)) {
if (test1 == null) {
test1 = new ThreadTest12();
}
return test1;
} else {
if (test2 == null) {
test2 = new ThreadTest12();
}
return test2;
}
}
private void run1() throws InterruptedException {
System.out.println(Thread.currentThread().getName());
synchronized (test1) {
System.out.println(Thread.currentThread().getName() + "start run1");
Thread.sleep(9900);
System.out.println(Thread.currentThread().getName() + "end run1");
//ThreadTest12.instentce().run2();
}
}
private void run2() throws InterruptedException {
System.out.println(Thread.currentThread().getName());
// synchronized (test2) 没有发生资源竞争
synchronized (test1) { // 发生资源竞争
System.out.println(Thread.currentThread().getName() + "start run2");
Thread.sleep(9900);
System.out.println(Thread.currentThread().getName() + "end run2");
}
}
@Override
public void run() {
try {
String name = Thread.currentThread().getName();
if ("Thread-0".equals(name)) {
ThreadTest12.instentce().run1();
} else {
ThreadTest12.instentce().run2();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}