Java中实现线程的两种方式

 实现线程的第一种方式:

  编写一个类,直接继承java.lang.Thread,重写run方法

  怎么创建线程对象? new就行了

  怎么启动线程呢?   调用线程对象的start()方法

  注意:方法体中的代码永远都是自上而下的顺序依次逐行执行。

  以下程序的输出结果有这样的特点:

    有先有后,有多有少

 public class ThreadTest02{

   public static void main(String[] args){

      //这里是main方法,这里的代码属于主线程,在主栈中运行。

     //新建一个分支线程对象

    MyThread myThread = new MyThread();

    //启动线程

    //myThread.run(); //不会启动线程,不会分配新的分支栈。(这种方式是单线程)

   //start()方法的作用是:启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后,瞬间就结束了。

  //启动成功的线程会自动调用main方法,并且run方法在分支栈的栈底部(压栈)

 //run方法在分支栈的栈底部,main方法在主栈的栈底部。run和main是平级的。

    myThread.start();

    //这里的代码还是运行在主线程中。

    for(int i=0;i<1000;i++){

       System.out.println("主线程-->"+i);

    }

  }

}

 class MyThread extends Thread{

   public void run(){

     //编写程序,这段程序运行在分支线程中(分支栈)

     for(int i=0;i<1000;i++){

       System.out.println("分支线程-->"+i);

     }

   }

}

实现线程的第二种方式

   编写一个类实现java.lang.Runnable接口

 public class ThreadTest03{

  public static void main(String[] args){

    //创建一个可运行的对象

    MyRunnable r = new MyRunnable();

   //将可运行的对象封装成一个线程对象

  

   //合并代码

  //Thread t = new Thread(new MyRunnable());

    Thread t = new Thread(r);

   //启动线程

   t.start();

   for(int i=0;i<100;i++){

     System.out.println("主线程-->"+i);

   }

  }

}

//这并不是一个线程类,是一个可运行的类,它还不是一个线程

 class MyRunnable implements Runnable{

   public void run(){

      for(int i=0;i<100;i++){

         System.out.println("分支线程-->"+i);

      }

   }

}

采用匿名内部类

  public class ThreadTest04{

    public static void main(String[] args){

      //创建线程对象,采用匿名内部类方式

      //这里通过一个没有名字的类,new出来

      Thread t = new Thread(new Runnable(){

        public void run(){

          for(int i=0;i<100;i++){

             System.out.println("分支线程是-->"+i);

          }

        }

      });

      //启动线程

      t.start();

      for(int i=0;i<100;i++){

         System.out.println("分支线程是-->"+i);

      }

  }

}

你可能感兴趣的:(java,开发语言)