Java 在一个方法里面使用 new Thread(......).start(); 到底是好是坏?
这样的习惯不好,LZ这样的做法对于简单的线程肯定是没有问题的,但是匿名线程最大的问题是没有办法处理线程状态的改变,比如说:
有一个线程,我们管它叫p 定义为new Thread().start(); 这个时候如果我们想让这个线程在某种情况下挂起、休眠或者强制关闭的话,都是没有办法实现的,只能等着线程自动执行完,相当于为我们创建了一个没有办法人工操作的线程。
如果你的这个线程要用到原来方法中的变量的话,需要加上final,这个道理和内部类中使用该方法的变量是一个道理。
t=new Thread(this,name); 这句话 、
新建一个线程。。把自己和这个name作为参数传给他。。name你肯定明白。。你肯定是不明白那个this。。
那个this就是调用
NewThread(String threadname){
name =threadname;
t=new Thread(this,name);
System.out.println("New threa: "+t);
t.start();
}
这个构造方法创建的NewThread对象。。比如你在一个地方写
NewThread nt = new NewThread(“ds”);这样就会执行到这个构造方法里面去。。于是执行到这里后。。这里的this就是nt这个对象了。
thread类有一个构造方法接受一个Runnable类型和一个String类型的参数。。
启动通过这种方法创建的线程的话。。他会调用你传给他的Runnable里面的run方法。。
在你这里就是
public void run(){
try{
for(int i=5;i>0;i--){
System.out.println(name +": "+i);
Thread.sleep(1000);
}
}catch(Exception e){
System.out.println(name+"Interrupered");
}
System.out.println(name+" exiting.");
}
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!