无法在eclipse中使用main方法执行扩展Thread的类

时间:2013-04-01 13:35:00

标签: java eclipse multithreading

无法在eclipse中执行此操作。它有什么特别的原因吗?在启用执行选项之前,eclipse是否会查找任何特定内容? 如果执行以下代码,结果会是什么?是“1”吗?

class A extends Thread {
    private int i;
    public void run(){i=1;}
    public static void main(String[] args) {
        A a = new A(); a.run();System.out.println(a.i);
    }
}

编辑:只是玩继承和线程。此处未测试任何特定的线程功能。

2 个答案:

答案 0 :(得分:2)

您所要做的就是将您的班级设为公开

public class A extends Thread {
    private int i;
    public void run(){i=1;}
    public static void main(String[] args) {
        A a = new A(); a.run();System.out.println(a.i);
    }
}

答案 1 :(得分:1)

@Hussain关于让你的课程公开是对的,但我想我会为后代添加一些额外的信息。

  • 正如您的代码现在所示,您没有在另一个线程中运行代码。您可以从代码中删除extends Thread,它仍然可以正常工作。您的main只是直接调用run()方法而不是调用任何线程魔法。

  • 如果您确实希望您的代码在另一个线程中运行,那么您需要添加a.start();以启动线程运行,并a.join();等待它完成。在start()方法中,线程被分叉并调用run()方法。

    A a = new A();
    // start the thread which calls run()
    a.start();
    // wait for the thread to finish
    a.join();
    System.out.println(a.i);
    
  • 最后,建议您implements Runnable而不是extends Thread。所以你的代码看起来像是:

    A a = new A();
    Thread thread = new Thread(a);
    // start the thread which calls run()
    thread.start();
    // wait for the thread to finish
    thread.join();
    System.out.println(a.i);
    
  • 如果您之前没有这样做,我建议您阅读tutorial on threads