如何在多线程环境中实现一个对在线程执行结束时执行的事件进行排队的侦听器?期望的行为是每个线程都有自己的事件队列,这样它们就不会混淆并以原子方式执行。所以如果线程A调用了listener.execute(),那么只会执行“他的”事件。
我能想到的唯一方法是使用ThreadLocal变量但是如果我考虑complications here我宁愿不使用任何变量。
假设您有一棵树,并且想要删除x个节点,那么您不希望在每次“刷新”事件后执行刷新x次,但您最好将它们排队并在最后执行...备用x-1刷新: - )
答案 0 :(得分:1)
如果你真的想要避免使用ThreadLocal,你可以反转模式并将weak reference所有者线程存储在你的(唯一)queue中的每个事件中。
如果所有者不再可用,这也允许重新部署到任何其他线程。
但是我有点不确定,因为我从来没有看到在“线程执行结束”时执行这样的事件队列的需要。你真的有线程还是真的是任务还是可以运行?
答案 1 :(得分:0)
如果每个线程在其执行结束时都有自己的OWN队列,那么你的所有队列都不只是1-MEMBER队列吗?