原创

线程八锁,同步锁的应用

锁的八种情况的应用

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");
    }
}
正文到此结束
本文目录