创建线程的几种方式

1、继承Thread类

  步骤:a、定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程需要完成的任务。

      b、创建Thread子类的实例,即创建了线程对象。

      c、调用线程对象的start()方法来启动该线程。

//通过继承Tread类来创建线程
public ThreadTest1 extends Thread{
    //重写run()方法
    public void run(){
      System.out.println("我是一个线程。");
    }  
    public static void main(String[] args){
        //创建TreadTest1类的实例
        ThreadTest1 t = new ThreadTest1();
        //启动线程
        t1.start();  
    }
}

注:该方法创建的线程,多个线程之间无法共享线程类的实例变量。

2、实现Runnable接口

  步骤:a、定义Runnable接口的实现类,并重写该接口的run()方法。

      b、创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

          c、调用线程对象的start()方法来启动该线程。

//通过实现Runnable接口来创建线程
public class ThreadTest2 implements Runnable{
  //重写run()方法
  public void run(){
     System.out.println("我是第二种创建线程的方法");
  }
  public static void main(String[] args){
      ThreadTest2 t2 = new ThreadTest2();
      new Thread(t2,"新线程").start();
  }
}

注:该方法创建的多个线程可共享线程类的实例变量。

3、实现Callable接口(java 5开始提供)

  步骤:a、创建Callable接口的实现类实例,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值,再创建Callable实现类的实例。

          b、使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

      c、使用FutureTask对象作为Thread对象的target创建并启动新线程。

     d、调用FutureTask对象的get()方法来获得子线程执行后的返回值。

猜你喜欢

转载自www.cnblogs.com/xiaoxli/p/9430919.html