锁的八种情况的应用
package com.debuggg.test1.main2;
/**
* 作者 ZYL
* 功能描述 : 题目:判断打印的是“one”or “two”
*
* 1.两个普通同步方法,两个线程,标准打印,打印?//one two
* 2.新增Thread.sleep()方法给getOne(),打印?one,two
* 3.新增普通方法getThree(),打印?three,one,two
* 4.新增number对象,第二个线程使用number1调用,打印?two,one
* 5.修改getOne()为静态同步方法,打印?two,one
* 6.两个方法都修改为静态同步方法,打印?one,two
* 7.getOne()为静态同步方法,getTwo()是非静态同步方法,两个Number对象,一个调用one,一个two,打印?two,one
* 8.两个均为静态同步方法,两个Number对象,打印?one,two
*
* 线程八锁的关键:
* ①非静态方法的锁默认为:this,静态方法的锁为 对应的类对象Number.class
* ②某一个时刻内,只能有一个线程持有锁,无论是几个方法
* 日期 2020-03-30 12:54
* 参数 null
* 返回值
*/
public class TestThread8Monitor {
public static void main(String[] args) {
Number number = new Number();
Number number1 = new Number();
new Thread(() -> {
number.getOne();
}).start();
new Thread(() -> {
// number.getTwo();
number1.getTwo();
}).start();
// new Thread(() -> {
// number.getThree();
// }).start();
}
}
class Number{
public static synchronized void getOne(){
try{
Thread.sleep(3000);
}catch(Exception e){
}
System.out.println("one");
}
public static synchronized void getTwo(){
System.out.println("two");
}
public void getThree(){
System.out.println("three");
}
}
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载