线程锁的8个问题
public class TestThread8Monitor {
/**
* 1、两个普通同步方法,两个线程,打印输出 //one two
* 2、给getOne新增sleep方法(以下测试getOne的sleep方法不要去掉),打印输出 //one two
* 3、新增普通方法getThree,打印输出//three one two
* 4、两个普通同步方法,两个number对象,两个线程 //two one
* 5、更改getOne为静态同步方法,打印输出//two one
* 6、两个静态同步方法,一个number对象,两个线程,打印输出//one two
* 7、一个静态同步方法,一个非静态同步方法,两个number对象,两个线程,打印输出//two one
* 8、两个静态同步方法,两个number对象,两个线程,打印输出//one two
* 线程8锁的关键
* 静态方法非静态方法的锁不同。
* 某一时刻,只能有一个线程持有锁,无论几个方法。
*/
public static void main(String[] args) {
Number number = new Number();
Number number2 = new Number();
new Thread(new Runnable() {
@Override
public void run() {
Number.getOne();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
//number2.getTwo();
number2.getTwo();
}
}).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// number.getThree();
// }
// }).start();
}
}
class Number {
public static synchronized void getOne() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("one");
}
public synchronized void getTwo() {
System.out.println("two");
}
public void getThree() {
System.out.println("three");
}
}