【发布时间】:2012-06-22 13:35:03
【问题描述】:
我对一个奇怪的问题感到困惑。基本上情况是这样的。我在我的类中实现了runnable,我在一个新线程中传递了这个类,我在实现runnable的类中覆盖了我的run()方法,然后我启动了线程。但是,我的 start() 方法从不调用我的 run() 方法。我搜索了论坛,但似乎找不到另一个类似的问题。
下面是我的示例代码:
public class EmailManager implements Runnable {
PortalManagementSBLocal pmbr= this.lookupPortalManagementSB();
Thread runner;
String emailServerName = "";
String smtpPort = "";
String emailTo = "";
String emailFrom = "";
String mailer = "JavaMailer";
String subject = "";
String message = "";
public EmailManager() {
}//default constructor
public EmailManager(String emailTo, String subject, String message){
this.emailTo=emailTo;
this.subject = subject;
this.message = message;
//need to make this dynamic
this.emailFrom = pmbr.getEmailFrom();
this.emailServerName = pmbr.getEmailServerName();
this.smtpPort = pmbr.getEmailSMTPPort();
//runner = new Thread(this,"Email");
runner = new Thread(this);
runner.start();
System.out.println("***** Email Thread running...");
}
@Override
public void run(){
sendEmail(); //This is never called
}
非常感谢任何指导!非常感谢!
【问题讨论】:
-
你确定 start() 被调用了吗?在调用 sendMail() 之前,您可以在 run() 的开头添加一条日志消息吗?
-
你构造了EmailManager的派生类型吗?
-
讨厌的设计,实例化线程并在构造函数中启动它。几乎肯定会产生竞争条件。
-
@Qwerky 我并不是说这是一个好的设计,但我看不出它会如何产生竞争条件。每次实例化这种类型的对象时,在执行方面,这与在构造函数之外启动一个线程没有什么不同。
标签: java multithreading