我正在尝试使用线程,任何人都可以告诉我下面的代码有什么问题。我在main中获得NullPointerException
。
public class threadtest implements Runnable {
Thread t;
public threadtest(String name) {
Thread t = new Thread(name);
}
public void run() {
for(int i = 0; i <= 10; i++) {
try {
Thread.sleep(1000);
}
catch(Exception e) {
System.out.println(e);
}
}
}
public static void main(String args[]) {
threadtest ob = new threadtest("satheesh");
ob.t.start();
}
}
答案 0 :(得分:5)
在构造函数中,您声明一个名为t
的局部变量,该变量使用与您的字段t
相同的名称。只需将Thread t
替换为this.t
或简单t
:
public threadtest(String name) {
this.t=new Thread(name);
}
BTW1,强烈建议用大写字母开始课程名称,例如ThreadTest
就是一个更好的名字。
答案 1 :(得分:0)
永远不会使用字段Thread t
,threadtest
本身就是Runnable。
移除t
,然后致电new Thead(threadtest).start();
或java.util.concurrent.Executors.newSingleThreadExecutor().submit(threadtest);
答案 2 :(得分:0)
如果您希望自己的runnable被执行,则必须将“this”传递给线程的构造函数。
答案 3 :(得分:0)
this
作为参数传递给Thread。因为现在,您实现了runnable,但只是将字符串name
传递给Thread构造函数。这不会做任何事情。
public threadtest(String name) {
t = new Thread(this, name);
}