我对java不熟,现在想问一下,我在main里起一个新线程,start()之后,应该是立刻返回执行下面的程序吧,如果下面没程序了,main是不是就退出了?(也就是这个程序退出了)??那这时我刚才在main里起的线程还在运行么?(那个线程里是个无限循环)
如果还在运行的话,我如何停止这个线程?

解决方案 »

  1.   

    1)start()之后,主线程会立刻执行后续代码。
    2)是否退出,还要看线程的种类,如果通过setDaemon(true)设置线程为后台执行,那么,在你的这种情况下,主线程执行完毕之后,子线程也会关闭退出,当然,达不到预期的效果;否则,继续执行子线程,因为是无限循环,所以不会停止。3)两种方法,1.主线程通过stop终止,比如你可以启动线程后执行
        Thread.sleep(1000);
        t.stop();
    (以上代码会抛出违例,此处省略)2. 改子线程为有限循环,满足条件后,跳出循环。
      

  2.   

    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退出,新现程继续运行吗?如何停止它?
      

  3.   

    线程可以设置daemon,如果是守护线程的话,当没有非守护线程运行时该线程会自动结束。
    默认是非守护线程的。
    你自己试一下就知道了。另外stop已经不推荐使用了。
      

  4.   

    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");
    }
    }}
    你可以试一下,楼上正确
      

  5.   

    to:UnAgain() 我希望是用user线程,也就是不自动退出的,但是又希望以后能控制它,达到类似windows服务的效果,比如(按上面的例子,假设有输入参数控制):java Test start  -〉程序启动,运test子线程,之后main退出,test继续运行java Test stop   -〉刚才生成的test子线程停止,并退出。
      

  6.   

    to lizhaogui() 设成daemon类型达不到我想要的效果,我希望它是一致运行下去的,但我又能控制它的停止
      

  7.   

    另外stop已经不推荐使用了。----------
    那使用什么来停止线程?interrupt()???
      

  8.   

    在run方法里加循环和标志,如果标志设为false就退出。
    interrupt()并不能停止正常运行着的线程,只有线程在sleep或wait的时候才能起作用。