-
对象的所有状态是什么
Thread
?- 新的
- 可运行
- 封锁
- 等待
- TIMED_WAITING
- 终止
-
线程进入块时可以进入什么状态
synchronized
?- 可运行
- 封锁
在RUNNABLE中,如果标记的代码块
synchronized
没有被另一个线程占用。否则,我们的线程将收到 BLOCKED 状态并等待互斥对象被释放。 - 调用该方法时线程会进入什么状态
wait()
?调用此方法会将线程置于 WAITING 状态。
该方法只能在已被当前线程“锁定”的互斥对象上的wait()
块内调用,否则该方法将抛出IllegalMonitorStateException异常。synchronized
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
当一个方法被调用时wait()
,当前线程释放该对象的锁monitor
并进入WAITING状态,等待另一个线程调用该monitor.notify()
方法monitor.notifyAll()
。一旦发生这种情况,线程就会醒来,如果监视器不忙,它将抓住它并继续工作。
如果监视器被另一个线程占用,则当前线程将进入 BLOCKED 状态。 -
调用该方法时线程会进入什么状态
调用此方法会将线程置于 TIMED_WAITING 状态。wait(500)
?
与方法类比wait()
,它只能在已被当前线程“锁定(locked)”的互斥对象上的wait(timeout)
一个块内调用。synchronized
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
当调用该方法时
wait()
,当前线程释放该对象的锁monitor
并进入睡眠状态 500 毫秒。该对象monitor
可能被另一个线程捕获。
500 毫秒后,线程将被唤醒,如果monitor
它不忙,它将抓住它并继续工作。
如果监视器被另一个线程占用,则当前线程将进入 BLOCKED 状态。调用该方法时线程会进入什么状态
notify()
?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
之后monitor.wait()
,线程将进入 WAITING 状态。notify()
对象上的另一个线程调用的方法monitor
会将线程从 WAITING 状态移至 RUNNABLE 状态,除非监视器对象被另一个线程捕获,否则移至 BLOCKED 状态。 -
调用该方法时线程会进入什么状态
notifyAll()
?notifyAll()
“将留下”所有线程。所有“睡眠”(WAITING)线程之一将进入 RUNNABLE 状态,接管正在使用的对象的监视器并继续其工作。其余的将处于 BLOCKED 状态。一旦第一个“唤醒”线程释放了其他人都在等待的监视器,下一个线程就会重复它的命运(任意线程将从 BLOCKED 状态进入 RUNNABLE 状态)。这将继续,直到所有“唤醒”线程离开 BLOCKED 状态。 -
三个线程中的synchronized块称为
其中两个将进入 BLOCKED 状态,一个进入 RUNNABLE 状态wait()
互斥对象。如果第四个线程调用,这些线程将进入什么状态notifyAll()
? -
尽管 和join(500)
它与有何不同wait(500)
?join(500)
会将wait(500)
当前线程转移到 TIMED_WAITING 状态,但它们之间存在显着差异:join(500)
在线程上调用,wait(500)
在该块同步的对象上的同步块内调用。
调用时,join(500)
当前线程将等待 500 毫秒,等待join()
调用其方法的线程完成。
调用时,wait(500)
当前线程将释放同步对象的锁并进入睡眠状态 500 毫秒。
500 毫秒后,这两种情况下线程都将继续工作。 -
wait(500)
它与有何不同sleep(500)
?sleep(500)
在线程上调用,wait(500)
在同步块内同步该块的对象上调用。
调用时,sleep(500)
当前线程将等待 500 毫秒,然后继续其工作。
调用时,wait(500)
当前线程将释放同步对象的锁并进入睡眠状态 500 毫秒。 -
调用该方法时线程会进入什么状态
当一个方法被调用时yield()
?yield()
,当前线程“跳过它的轮次”,java立即切换到执行下一个线程。线程从一个状态转到running
另一个状态ready
。运行和就绪状态是 RUNNABLE 状态的子状态。
GO TO FULL VERSION