你的位置:首页 > Java教程

[Java教程]Java中 实现多线程成的三种方式(继承,实现,匿名内部类)


------------------------------------------------------------------------------------------------------------    

    /**  第一种方式:继承Thread类

    *             1. 定义一个类,然后让该类继承Thread类

    *             2. 重写run方法

    *             3. 创建定义的这个类的对象

    *             4. 启动线程

    */

 //继承Thread类

  public class MyThread extends Thread{
    
    public MyThread() {}

    public MyThread(String name) {
        super(name);
    }

    //run方法中封装的应该是要被线程执行的代码 ,run方法中代码的原则,一般存方的都是比较耗时的代码
    public void run (){
        
        for (int i = 0; i < 200; i++) {
            
            System.out.println(Thread.currentThread().getName() + "---" + i);
        }
    } 
}

  //测试方法

  private static void Test() {

   // 创建对象
        MyThread mt1 = new MyThread();
        MyThread mt2 = new MyThread();


        //启动线程
        // public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
        mt1.start();
        //mt1.start();// 线程的启动只能是一次
        mt2.start();

  }

------------------------------------------------------------------------------------------------------------

 

    /**  第二种方式:实现Runnable接口

     *    (1): 创建一个类,让该类实现Runnable接口

     *    (2): 重写run方法

     *    (3): 创建该类的对象

     *    (4): 创建Thread类的对象,然后把3中的对象作为参数传递给Thread

     *    (5): 启动线程

     */

  //实现Runnable接口

  public class MyThread2 implements Runnable {
   
    public MyThread2() {
        super();
      }

      public void run() {
        
          for(int x = 0 ; x < 200 ; x++){
            
             System.out.println(Thread.currentThread().getName() + "---" + x);
        }
    }
}

  //测试方法

    private static void Test2() {

     // 创建MyThread的对象
        MyThread2 mt = new MyThread2();
        // 创建Thread类的对象,然后把3中的对象作为参数传递给Thread
        // public Thread(Runnable target)
        Thread t1 = new Thread(mt,"张飞");
        Thread t2 = new Thread(mt,"关羽");
        Thread t3 = new Thread(mt,"刘备");
        // 启动线程
        t1.start() ;
        t2.start() ;
        t3.start() ;
    }

 

------------------------------------------------------------------------------------------------------------

 

    /**  第三种方式:使用匿名内部类的方式实现

     *    new 类名/接口名() {      

     *      方法重写 ;

     *    } ;

     */

 

 

 

 //测试方法

 //匿名内部类

    private static void Test3() {

    new Thread() {
           public void run() {
                System.out.println("线程执行了。。。。。。。");
            }
        }.start();
    }

------------------------------------------------------------------------------------------------------------