被java同步化、监视、等待()和通知()弄糊涂了
如果这些说法属实:被java同步化、监视、等待()和通知()弄糊涂了,java,android,multithreading,Java,Android,Multithreading,如果这些说法属实: 当线程进入一个同步区域(方法或块)时,它将获得对象监视器,然后该区域中没有wait()或notify()调用,因此当退出该区域时,它将丢失监视器 当线程在同步区域中调用wait()时,它会将自身的状态设置为blocked并丢失监视器。线程调度已触发,另一个线程将运行 当一个线程(称为thread a)调用同步区域中的notify()时,JVM将选择一个线程(称为thread B),该线程任意等待监视器,并将其状态设置为Runnable 优先级高于当前运行线程的线程进入可运行状
因此,在案例3中,如果线程B具有更高的优先级,则会发生线程调度,线程B将运行。现在线程A仍然有监视器,线程B如何运行 因此,在案例3中,如果线程B具有更高的优先级,则会发生线程调度,线程B将运行。现在线程A仍然有监视器,线程B如何运行?-错误 一旦Thread-A调用
notify()
,Thread-B将不会开始执行。它仍然必须获得Thread-A当前持有的对象的锁。一旦Thread-A退出同步块或调用wait()
,Thread-B就可以获得对象的锁(一旦Thread-A退出同步块或调用wait())
,它会释放锁)。一旦线程B锁定了该对象,它就开始执行
即使线程B的优先级高于线程A,它也必须等到获得锁。线程B必须重新获取监视器,然后才能继续,基本上……这是4个问题。