有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程在java中将项目添加到列表对象时自动运行线程

我正在实现一个任务,其中我有一个类say Email,它包含一个LinkedList,其中包含所有要发送的电子邮件。我有几个课程可以向这个队列添加电子邮件

现在,我想要的是,每当在LinkedList对象中添加一个元素时,类Email就会自动启动一个线程,直到所有电子邮件都已发送。能给我一些指导吗


共 (4) 个答案

  1. # 1 楼答案

    对列表使用BlockingQueue。挂线。线程在queue take()调用中循环,当获取电子邮件实例时,发送它,然后返回队列

  2. # 2 楼答案

    我建议您编写一个EmailSender类,它使用ExecutorService而不是队列来提交任务以发送电子邮件

    传递一个有副作用的收藏是个坏主意。e、 g.如果来电者打电话怎么办

    • addAll()-添加多封电子邮件
    • remove()-取消已添加到队列中的电子邮件
    • retainAll()-取消除列出的电子邮件以外的所有电子邮件
    • 清除()-取消所有电子邮件

    您正在公开各种可能没有实现或没有意义的功能

  3. # 3 楼答案

    LinkedList<Email>替换为^{},立即启动线程,并将其传递给队列。线程应该调用queue.take(),它将被阻止,直到电子邮件可用。本质上,你会得到一个休眠线程在队列的接收端等待,产生你想要的效果:任何时候一封电子邮件被插入队列,阅读线程就会醒来,抓取新的电子邮件,处理它,然后回到睡眠状态

  4. # 4 楼答案

    您应该在Email类中实现一个方法(例如public void addEmail(...)),而不是让您提到的几个类中的每一个都直接向EmailLinkedList添加元素,并让其他类调用该方法并将新电子邮件作为参数传递
    在这个addEmail方法中,您可以将新的电子邮件添加到LinkedList(可能是在检查它不在列表中之后),并启动希望自动启动的线程