java多线程怎么唤醒特定线程

如题所述

java使用单纯的wait/notify是无法唤醒指定线程的

一般的做法是修改一个特定标识,然后notifyAll,被唤醒的线程查看该标识是否指定自己处理,是就运行下去,不是就继续wait

还有一种做法是针对每一个线程做一个wait object,要唤醒哪一个就notify哪一个object就行了,但是能不能这样做去取决于你的业务需求
温馨提示:内容为网友见解,仅供参考
无其他回答

java如何唤醒指定的等待线程
notify()方法 无法指定。选择是任意性的。唤醒在此对象监视器上等待的单个线程。如果有多个线程都在此对象上等待,则会选择唤醒其中一个线程。

通俗易懂,深入解析Java多线程中的Notify和NotifyAll!
notify 和 notifyAll 的差异在于唤醒线程的方式:notify 会随机唤醒一个等待池中的线程,而 notifyAll 则会唤醒所有等待的线程。选择哪个方法取决于实际需求:如果只有一个线程需要被唤醒,notify 是合适的选择,以提高效率;若需要唤醒所有等待者,防止死锁,应使用 notifyAll。举个例子,考虑一个电商订单...

关于java多线程wait 和sleep方法
程序分析:synchronized(b)限定线程b作为锁。b.wait()释放锁,阻塞线程,等待唤醒。唤醒后线程回到中断前状态。wait()和notify()用于线程同步控制,wait()暂时释放锁,允许其他线程使用,notify()唤醒等待线程。通过以上分析,理解Java中多线程同步控制的关键概念。

破除Java神话之线程按优先级唤醒
在编写多线程代码的时候经常发生多个线程等待一个事件的情况 这种情况多发生于多个线程在同步方法或者同步块内调用wait方法等待同一个被锁住的对象 当另一个锁住该对象的线程从同步方法或者同步块中调用notify或者notifyAll方法时这些等待线程被唤醒 notify调用仅仅唤醒一个线程 因此如果有多个线程正处于等待状态...

java的等待唤醒机制必须要让线程等待吗
(4)使用suspend挂起线程后,可以通过resume方法唤醒线程。虽然suspend和resume可以很方便地使线程挂起和唤醒,但由于使用这两个方法可能会造成死锁,因此,这两个方法被标识为deprecated(抗议)标记,这表明在以后的jdk版本中这两个方法可能被删除,所以尽量不要使用这两个方法来操作线程。调用sleep()、...

在java中一个线程如何每一秒唤醒一次另外一个在休眠的线程
每一秒唤醒另外一个线程,讲那个要唤醒的线程对象传入到本线程,调用notify方法就行了

java线程发生异常时怎么重新启动这个线程
1.主线程写个循环3次的循环 2.循环体内运行线程,运行完以后调用wait()等待 3.线程在运行,如果出异常notifyAll()唤醒主线程继续循环

如何在 Java 中正确使用 wait,notify 和 notifyAll
notify:唤醒一个线程,默认唤醒线程池第一个挂起的线程,这个不确定只能说通常会这样!notifyAll:唤醒所有线程池等待的对象,这个存在的原因是因为,你在执行多线程异步 任务的时候,会出现己方线程全部等待,无法被唤醒,只能通过这个方法,唤醒所有 挂起的线程,这样能够保证,对方线程被唤醒,然后对方也会执行...

如何在 Java 中正确使用 wait,notify 和 notifyAll
2. 永远在synchronized的函数或对象里使用wait、notify和notifyAll,不然Java虚拟机会生成 IllegalMonitorStateException。3. 永远在while循环里而不是if语句下使用wait。这样,循环会在线程睡眠前后都检查wait的条件,并在条件实际上并未改变的情况下处理唤醒通知。4. 永远在多线程间共享的对象(在生产者消费...

java 多线程在竞争一个内部锁时,只有一个线程获得锁,其它线程状态是什么...
②.调用wait(),使该线程处于等待池(wait blocked pool),直到notify()\/notifyAll(),线程被唤醒被放到锁池(lock blocked pool ),释放同步锁使线程回到可运行状态(Runnable)③.对Running状态的线程加同步锁(Synchronized)使其进入(lock blocked pool ),同步锁被释放进入可运行状态(Runnable)。4. ...

相似回答