【面试:并发篇12:多线程:线程八锁】
00.前言
如果有任何问题请指出,感谢。
01.介绍
线程八锁 其实就是考察 synchronized 锁住的是哪个对象
02.例子
情况一:
@Slf4j(topic = "c.Number")
class Number{
public synchronized void a() {
log.debug("1");
}
public synchronized void b() {
log.debug("2");
}
}
public static void main(String[] args) {
Number n1 = new Number();
new Thread(()->{
n1.a(); }).start();
new Thread(()->{
n1.b(); }).start();
}
结果
12或21
这个很好理解 两个锁的监听器都是 Number的对象n1,不过结果为什么有21 因为虽然可能性很小 但依然有可能先运行b线程
情况二:
@Slf4j(topic = "c.Number")
class Number{
public synchronized void a() {
sleep(1);
log.debug("1");
}
public synchronized void b() {
log.debug("2");
}
}
public static void main(String[] args) {
Number n1 = new Number();
new Thread(()->{
n1.a(); }