public class theadTest{ 

        public static void main(String []args)
        {
             thread1 r = new thread1();
             r.start();
        
              for( int i=0;i<100;i++){
             System.out.println( "main thread"+i);
             } 
        }     
}

class thread1 extends Thread{
       public void run(){
       for( int i=0;i<100;i++){
        System.out.println( "thread1 thread"+i);
        }    
   }
}
注意点:1,run方法结束了,thread1就退出了
                  2,start之后会调用r的run方法
                 3 ,thread1继承Thread,所以r直接可以调用start方法
 
public class theadTest{ 

        public static void main(String []args)
        { 
          thread1 r = new thread1();
           Thread t = new Thread(r); 
           t.start(); 
                  
           for( int i=0;i<100;i++){
           System.out.println( "main thread"+i);
           } 
        }     
}

class thread1 implements Runnable{    
    public void run(){
       for( int i=0;i<100;i++){
          System.out.println( "thread1 thread"+i);
          }      
   }
}
注意:1,thread1实现了 Runnable接口,那么自然实现了run方法,t用父类r的方法,实现了run方法,这是多态中的父类的构造方法实现子类的构造方法
 
public class threadInterupt{ 

        public static void main(String []args)
        {
             thread2 r = new thread2(); 
             r.start();
             try
               r.sleep(10000);
                r.interrupt();
             } catch(InterruptedException e){ 
             }
        }        
}


class thread2 extends Thread{
    
public void run(){
    
   while( true){
         try
         sleep(1000);
         System.out.println( "thread2 running");
         } catch(InterruptedException e){
          System.out.println( "thread2 quit");
          return;
         }
      }
  }
}
1、sleep方法会抛InterruptedException 异常,要把try,catch加上
2、interrupt方法之后会让catch中的操作执行完,废弃掉的stop方法,是强制kill线程,不能执行后续收尾操作
3、run方法中的InterruptedException 异常不能用throws来处理,因为他是实现Runnable的方法,而Runnable中的run方法是不抛出异常的,实现的方法是不能覆盖被实现的方法的throw的