Java多线程 - 同步块中的读写器线程

时间:2017-04-07 11:36:22

标签: java multithreading synchronized synchronized-block

这是求职面试中的一个问题:

如何在同步块中识别读线程和写线程?

2 个答案:

答案 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