我认为static main
方法中使用的变量也应该是static
。
问题是我根本不能在这个方法中使用this
。如果我没记错的话,我必须使用commnad myThread = new ThreaD(this)
启动线程。
以下代码会产生错误,因为我在线程启动时使用了this
。
我在这做错了什么?
package app;
public class Server implements Runnable{
static Thread myThread;
public void run() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
System.out.println("Good morning");
myThread = new Thread(this);
}
}
答案 0 :(得分:12)
您不能使用this
因为main是静态方法,this
是指当前实例而没有。您可以创建一个可以传递给线程的Runnable对象:
myThread = new Thread(new Server());
myThread.start();
这将导致您在Server类的'run方法中放置的任何内容由myThread执行。
这里有两个独立的概念,Thread和Runnable。 Runnable指定需要完成的工作,Thread是执行Runnable的机制。虽然Thread有一个可以扩展的run方法,但你可以忽略它并使用一个单独的Runnable。
答案 1 :(得分:3)
将new Thread(this)
更改为new Thread(new Server())
:
package app;
public class Server implements Runnable{
static Thread myThread;
public void run() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
System.out.println("Good morning");
myThread = new Thread(new Server());
}
}
答案 2 :(得分:0)
class SimpleThread extends Thread {
public SimpleThread(String name) {
super(name);
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i + " thread: " + getName());
try {
sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {}
}
System.out.println("DONE! thread: " + getName());
}
}
class TwoThreadsTest {
public static void main (String[] args) {
new SimpleThread("test1").start();
new SimpleThread("test2").start();
}
}