这是求职面试中的一个问题:
如何在同步块中识别读线程和写线程?
答案 0 :(得分:2)
您可以随时执行以下操作:
Thread current = Thread.currentThread()
现在;当你有一个map / list / ...的线程时,你可以简单地比较一下引用。简单的例子:
您可以在班级中添加两个字段:
private Thread reader =
private Thread writer =
然后你可以做
synchronized foo() {
if (Thread.currentThread() == reader) ...
并且为了记录:虽然事情看起来很容易,但是一个人处理这个问题"应该退后一步:这闻起来XY problem 到处都是。
含义:在"真实"世界;我会认为这样的代码是糟糕的做法。最有可能的是,它试图解决一个应该以其他方式解决的问题!
因此,面试官的答案最好是直接技术答案的组合;但指出"糟糕的做法"问题。
答案 1 :(得分:0)
您可以检查当前线程是否为instanceOf Reader或Writer