class TestThread extends Thread { public void run() { while(true){//do sth...} } }class Test { public static void main(String[] args) { TestThread test = new TestThread(); test.start(); } }如上,执行java Test,生成新线程后main退出,新现程继续运行吗?如何停止它?
package test;import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;public class Time{ public static String getMonday(Date date){ Calendar c = Calendar.getInstance(); // c.setTime(date); c.set(2006,5,16); // System.out.println(c.get(Calendar.DATE)); c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY); return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); } public static void main(String args[]){ // String a = Time.getMonday(new Date()); // System.out.println(a); Thread1 t = new Thread1(); t.start(); // t.setDaemon(true); System.out.println("@@"); // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // t.stop(); System.exit(0); } } package test; public class Thread1 extends Thread{ public void run() { while(true){ System.out.println("I am live"); } }} 你可以试一下,楼上正确
to:UnAgain() 我希望是用user线程,也就是不自动退出的,但是又希望以后能控制它,达到类似windows服务的效果,比如(按上面的例子,假设有输入参数控制):java Test start -〉程序启动,运test子线程,之后main退出,test继续运行java Test stop -〉刚才生成的test子线程停止,并退出。
to lizhaogui() 设成daemon类型达不到我想要的效果,我希望它是一致运行下去的,但我又能控制它的停止
2)是否退出,还要看线程的种类,如果通过setDaemon(true)设置线程为后台执行,那么,在你的这种情况下,主线程执行完毕之后,子线程也会关闭退出,当然,达不到预期的效果;否则,继续执行子线程,因为是无限循环,所以不会停止。3)两种方法,1.主线程通过stop终止,比如你可以启动线程后执行
Thread.sleep(1000);
t.stop();
(以上代码会抛出违例,此处省略)2. 改子线程为有限循环,满足条件后,跳出循环。
while(true){//do sth...}
}
}class Test {
public static void main(String[] args) {
TestThread test = new TestThread();
test.start();
}
}如上,执行java Test,生成新线程后main退出,新现程继续运行吗?如何停止它?
默认是非守护线程的。
你自己试一下就知道了。另外stop已经不推荐使用了。
import java.util.Calendar;
import java.util.Date;public class Time{
public static String getMonday(Date date){
Calendar c = Calendar.getInstance();
// c.setTime(date);
c.set(2006,5,16);
// System.out.println(c.get(Calendar.DATE));
c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
public static void main(String args[]){
// String a = Time.getMonday(new Date());
// System.out.println(a);
Thread1 t = new Thread1();
t.start();
// t.setDaemon(true);
System.out.println("@@");
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// t.stop();
System.exit(0);
}
}
package test;
public class Thread1 extends Thread{
public void run() {
while(true){
System.out.println("I am live");
}
}}
你可以试一下,楼上正确
那使用什么来停止线程?interrupt()???
interrupt()并不能停止正常运行着的线程,只有线程在sleep或wait的时候才能起作用。