如何使用线程执行类的不同方法?

时间:2018-04-06 20:09:49

标签: java multithreading runnable

我的java swing应用程序中有5个类,如下所示:

SendEmail.java
StudentRegister.java
StudentLogin.java
TeacherRegister.java
TeacherLogin.java

SendEmail.java的结构如下:

    class sendEmail extends Thread
{
  public void studentMail(){}
  public void teacherMail(){}
}

我想要的是从StudentRegister.java成功注册学生后我想同时指导学生到StudentLogin.java我想发送学生确认邮件,该邮件将由SendEmail.java的studentMail()方法发送类。
我想和老师做同样的事情,但这次发送邮件的方法是不同的,即teacherMail()。

在这里,我不能有一个可以开始执行线程的常用方法run()。如何在执行线程时执行不同的类方法。

2 个答案:

答案 0 :(得分:1)

我认为有很多方法可以解决这个问题。一个非常容易实现的方法是使用共享接口和代码来代替您的实现。

interface EmailSender {
    void doMail();
}

然后只创建几个实现

class TeacherEmailSender implements EmailSender {
    public void doMail() { /* implementation */}
}
class StudentEmailSender implements EmailSender {
    public void doMail() { /* implementation */}
}

然后您可以执行类似的操作,然后根据需要设置其实际实现。

EmailSender emailSender;
if (thisIsaStudentRegistration) {
    emailSender = new StudentEmailSender();
} else {
    emailSender = new TeacherEmailSender();
}
new Thread(() -> { emailSender.doMail(); }).run();

这里有很多选择。根据通知的通用程度,可能适合创建enum通知类型,然后为注册表类中的那些注册不同的处理程序。

如果学生和教师电子邮件发送课程之间有很多共享功能,您可能会受益于共享部分实施(extend某些abstract基类)。

这完全取决于我的假设,即这是一个需要使用线程的类赋值。如果没有,请考虑跳过duffymo提到的并发性。

答案 1 :(得分:1)

我会有一个班级来发送电子邮件。它不关心学生或老师;来自,主题和内容将是唯一重要的事情。

我传递这些值,为TeacherStudent生成不同的内容。

在我知道存在性能问题之前,我不担心并发性。您可以很聪明地对其进行编码,使其正常工作,分析性能,然后进行更改以使性能可以接受。