同步方法里调同步方法

来源:9-2 并发最佳实践

朱小悬

2018-11-25

老师好!
假如一个类People 里面有两个synchronized方法:see()和write(),但是see方法里面调用了write方法。write方法就简单输出一句话。
see和write都不是静态方法。

现在new出来一个对象people,单线程下调用了see方法,发现可以走到wtite方法里面。

老师,这种情况是不是可以理解为synchronized是一把重入锁?

写回答

1回答

Jimin

2018-11-25

你好,synchronized确实是可重入锁,关于可重入锁,单独通过这个例子来理解容易出现偏颇,可以参考一下维基百科的定义:
若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错”,则称其为可重入(reentrant或re-entrant)的。即当该子程序正在运行时,执行线程可以再次进入并执行它,仍然获得符合设计时预期的结果。与多线程并发执行的线程安全不同,可重入强调对单个线程执行时重新进入同一个子程序仍然是安全的。

0
2
Jimin
回复
朱小悬
你是想说死锁?这个和死循环有啥关系,最多能想到递归吧
2018-11-29
共2条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程