线程启动不会调用run

Qin*_*uan 11 java multithreading

我对一个奇怪的问题感到困惑.基本上情况是这样的.我在我的类中实现了runnable,我在一个新线程中传递了类,我run()在实现runnable的类中覆盖了我的方法然后我启动了线程.但是,我的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
    }
Run Code Online (Sandbox Code Playgroud)

非常感谢任何指导!万分感谢!

Eri*_*son 8

你怎么知道从未调用过这种方法?

下面的简单测试有效.因此创建一个线程并在构造函数中运行它没有问题.所以还有其他事情会阻止你看到sendEmail()被调用的东西.

public class Test implements Runnable {
  Thread runner;
  public Test() {
    this.runner = new Thread(this);
    this.runner.start();
  }

  @Override
  public void run() {
    System.out.println("ya");   
  }

  public static void main(String[] args) {
    new Test();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 大家好,谢谢你的帖子!我意识到我的调试器正在运行主线程而不是运行程序Thread.我的sendEmail方法也存在问题,所以我最初认为run方法没有执行.再次感谢您的指导! (3认同)
  • "调试器正在运行主线程",这就是我的问题!干杯用户1433483 (2认同)