Java 如何根据线程的名称或id向其发送通知?可能吗?
上下文:java线程间通信 如何根据线程的名称或id向其发送通知? 可能吗 我们不能用Java与特定线程通信, 我们不知道调度器何时将CPU分配给线程。 那么Java 如何根据线程的名称或id向其发送通知?可能吗?,java,multithreading,Java,Multithreading,上下文:java线程间通信 如何根据线程的名称或id向其发送通知? 可能吗 我们不能用Java与特定线程通信, 我们不知道调度器何时将CPU分配给线程。 那么Thread类的方法public void setName(String name)、public String getName()和public int getId()的目的是什么呢 这些方法只帮助开发人员识别线程,或者我们可以将其用于线程间通信 以上代码是否有效 不,不是Thread是一个类名,但Thread.getName()是一个实
Thread
类的方法public void setName(String name)
、public String getName()
和public int getId()
的目的是什么呢
这些方法只帮助开发人员识别线程,或者我们可以将其用于线程间通信
以上代码是否有效
不,不是Thread
是一个类名,但Thread.getName()
是一个实例方法。因此,该代码将给您一个编译错误
但是,这是有效的:
if (Thread.currentThread().getName().equals("MyThread1")){
//MyThread1 specific code here
}
现在还不清楚这是否符合你的预期。在任何意义上,它肯定不会与线程通信。它只是说,“如果我在一个名为“MyThread1”
的线程上运行,那么请执行某些操作”
现在我们终于对你的问题有了一个明确的陈述 如何根据线程的名称或线程id向其发送通知 假设您指的是等待/通知样式的通知,那么一般来说,您不能 通过对某个对象进行
对象.notify()
调用发送通知,并由当前在同一对象的对象.wait()调用中被阻止的另一个线程接收
- 如果在没有线程等待时发出notify调用,那么它将丢失
- 如果对错误的对象进行了notify调用,则它将丢失
一般来说,任意线程不会以这种方式通知。它将做其他的事情。事实上,可以根据线程的名称或id来识别线程并不重要
您在这里真正应该做的是:
确定所需通知的样式。同步还是异步?是否保证交货?一对一还是一对多?是否传递了其他信息
为“通知”选择最合适的原语。例如:
- 等待/通知
- 信号量
- 屏障/闩锁
- 排队/退队
- 锁
- 打断
- 等等
设计您的应用程序,以便有一个映射或一些东西将从线程名称映射到适当的“通知通道”对象以通知它。或者更好的是,不要
好吧,你可以通过编程。有了它,您可以start()
it、run()
it、获取它的状态、堆栈跟踪、join()
it、interrupt()
。这显然是线程间通信。因此,是的,如果您知道某个线程的名称,您可以与该线程通信
但是,我认为在典型情况下,按线程名称查找线程没有多大意义。“我们无法通信特定的线程,对吗?”我不明白你在问什么。@Stephen我可以用java通信特定的线程吗?仍然没有意义。Java不“通信”线程,在非技术意义上也没有意义。我能做吗?啊!所以您>>实际上“MyThread1”是示例线程名,它处于可运行状态thread poolAgreed,我只使用线程名调试和检查日志。同意Timo:我在日志中使用线程名,以检查是否是发生异常的调度程序,还是HTTP请求。