我有一个按钮"addCashier“,它创建了一个叫做”收银员“的线程,现在这个线程只是每4秒生成一次订单,线程的run()方法中的一个while(true)循环。一切都很好,但现在我想添加一个按钮来模拟收银员注销。我在while循环onDuty中添加了一个布尔变量和一个公共函数logOff(),该函数将这个onDuty布尔值设置为false,以使我脱离运行的while循环。我现在的问题是,在我的gui类中,如何在特定线程上调用函数?每个收银员线程都是在运行时生成的,所以我不知道它们的名称。
我希望我说的有道理。提前谢谢。
发布于 2011-10-16 18:23:35
Thread t = CashierThread(); //keep the reference to thread somewhere...
现在不使用布尔型属性,而是使用内置的interrupted标志:
public void run() {
while(!Thread.currentThread().isInterrupted()) {
//...
}
}
当您想要通过单击按钮来关闭线程时,只需调用:
t.interrupt();
当然,您需要从客户端代码访问t
变量。
发布于 2011-10-16 18:26:40
您可以将每个线程的引用以及它的id
或Name
作为键存储到HashMap
中。稍后,当您想要处理某个特定的收银员线程时,可以使用Name
或id
从HashMap中获取相应的Thread
,并对其调用适当的logOff()
方法。
发布于 2011-10-16 18:27:10
如果收集对所有线程的引用是一个问题,另一种方法是使用一个公共的静态同步HashMap,它将threadId(运行时分配给每个线程的随机数)作为键,将布尔值作为值。您可以修改while循环,以便从这个集中式映射中选取相应的布尔值。这将允许您注销特定的收银员。
https://stackoverflow.com/questions/7786305
复制相似问题