Java和2个线程

时间:2012-03-28 14:06:28

标签: java multithreading

我正在尝试学习Java的线程以进行分配,但我不明白如何让每个线程都能做自己的代码。我也得到一个错误:

Program.java:1: error: Program is not abstract and does not override abstract me
thod run() in Runnable
public class Program implements Runnable {
       ^
1 error

因为作业需要它,我必须在同一个文件中做所有事情,所以我尝试了下面的代码:

public class Program implements Runnable {
    Thread thread1 = new Thread () {
        public void run () {
            System.out.println("test1");
        }
};

Thread thread2 = new Thread () {
    public void run () {
        System.out.println("test2"); 
        }
    };

    public void main (String[] args) {
        thread1.start();
        thread2.start();
    }
}

你可以帮我解决一下,并展示如何让2个线程相互执行不同的任务吗?我已经看过打印线程名称的例子,但我没有发现它们有用。 谢谢。

3 个答案:

答案 0 :(得分:3)

您的Program类定义为实现Runnable接口。因此,它必须覆盖并实现run()方法:

public void run () {
}

由于您的两个Thread对象使用的是匿名内部 Runnable类,因此您不需要,并且应该从implements Runnable删除Program } class definition。

public class Program {
   ...

答案 1 :(得分:0)

试试这个:

class Program {
    public static void main(String[] args) {
        Thread thread1 = new Thread() {
            @Override
            public void run() {
                System.out.println("test1");
            }
        };

        Thread thread2 = new Thread() {
            @Override
            public void run() {
                System.out.println("test2");
            }
        };
        thread1.start();
        thread2.start();
}

或者您可以创建一个单独的类来实现Runnable和ovverriding方法run()。 然后在main方法中创建一个Thread的实例,并将您的类对象作为参数:

class SomeClass implements Runnable {
@Override
run(){
...
}
}

并在主要:

Thread thread = new Thread(new SomeClass());

答案 2 :(得分:0)

当您implement interface(例如Runnable)时,必须实施其方法,在这种情况下run

否则,您的应用程序要编译并运行,只需从您的类声明中删除implements Runnable

public class Program {
    public void main (String[] args) {
        Thread thread1 = new Thread () {
            public void run () {
                System.out.println("test1");
            }
        };    

        Thread thread2 = new Thread () {
            public void run () {
                System.out.println("test2");
            }
        };
        thread1.start();
        thread2.start();
    }
}