假设我有一个对象 A,它有 2 个方法:
public doSomething()
{....}
public synchronised doSomethingElse()
{ ... }
并且我有thread1.doSomethingElse()
,thread2.doSomething()
仍然可以执行还是被thread1的锁阻塞了?
如果是这样,如何让thread1同时执行?
最佳答案
同步有两种类型 1. 对象级别 2.类级别(类级别同步仅适用于静态方法。)
在您的情况下,由于您的方法不是静态的,所以它是对象级同步。对于对象级同步,您可以同步整个方法,也可以同步方法的某些 block 。
当您同步一个方法时。这意味着类的同一对象无法从不同线程访问同步方法。由于每个对象只有一个锁。如果您为相同的 obj 但从不同的线程调用了 doSomethingElse() 。然后它就可以被一个线程访问。
现在给出你的答案: 由于您的第一个方法不同步,即 Something()。在任何情况下,如果您为任何线程调用它,甚至当您的第一个线程当前位于该方法中时调用它,它都不会受到影响。 锁仅适用于同步方法
Yourclass obj = new Yourclass();
Thread A = new MyThread(obj);
Thread B = new MyThread(obj);
……
public void run()
{
\\do what ever you want
\\both of your methods will be called.
\\ call them both here.
}
在这里,我创建了相同 Mythread 类的对象,您可以按照您的意愿进行操作。您可以创建两个不同实现的线程类的对象并编写您的运行。 无论如何,它都不会对通话产生影响。
关于java - 一个单独的线程可以继续执行另一个线程同步的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46576059/