多线程在java中将项目添加到列表对象时自动运行线程
我正在实现一个任务,其中我有一个类say Email
,它包含一个LinkedList,其中包含所有要发送的电子邮件。我有几个课程可以向这个队列添加电子邮件
现在,我想要的是,每当在LinkedList对象中添加一个元素时,类Email
就会自动启动一个线程,直到所有电子邮件都已发送。能给我一些指导吗
你可以在下面搜索框中键入要查询的问题!
我正在实现一个任务,其中我有一个类say Email
,它包含一个LinkedList,其中包含所有要发送的电子邮件。我有几个课程可以向这个队列添加电子邮件
现在,我想要的是,每当在LinkedList对象中添加一个元素时,类Email
就会自动启动一个线程,直到所有电子邮件都已发送。能给我一些指导吗
# 1 楼答案
对列表使用BlockingQueue。挂线。线程在queue take()调用中循环,当获取电子邮件实例时,发送它,然后返回队列
# 2 楼答案
我建议您编写一个EmailSender类,它使用ExecutorService而不是队列来提交任务以发送电子邮件
传递一个有副作用的收藏是个坏主意。e、 g.如果来电者打电话怎么办
您正在公开各种可能没有实现或没有意义的功能
# 3 楼答案
将} ,立即启动线程,并将其传递给队列。线程应该调用
LinkedList<Email>
替换为^{queue.take()
,它将被阻止,直到电子邮件可用。本质上,你会得到一个休眠线程在队列的接收端等待,产生你想要的效果:任何时候一封电子邮件被插入队列,阅读线程就会醒来,抓取新的电子邮件,处理它,然后回到睡眠状态# 4 楼答案
您应该在
Email
类中实现一个方法(例如public void addEmail(...)
),而不是让您提到的几个类中的每一个都直接向Email
的LinkedList
添加元素,并让其他类调用该方法并将新电子邮件作为参数传递在这个
addEmail
方法中,您可以将新的电子邮件添加到LinkedList
(可能是在检查它不在列表中之后),并启动希望自动启动的线程