java创建线程的三种方式

133 阅读2分钟

线程类

  java提供了Runnable接口和其子类Thread类可来实现多线程的功能(在JDK1.5之后新增了Callable接口实现可以拥有返回值的线程类)。继承Thread类或实现Runnable接口(Callable接口)并重写或实现run()方法(Callable接口为call()方法),之后调用这个类对象的start()方法便可创建一个新线程。

方法一:继承Thread类

  利用Thread类创建一个线程并直接利用该对象启动一个线程。

//自定义线程类
class MyThread extends Thread{
    @Override
    public void run() {
      //线程启动后执行的代码块
    }
}

//线程启动类
public class ThreadStater {
    public static void main(String[] args) {
      MyThread myThread=new Mythread();
      //调用线程对象的start()方法启动线程
      myThread.start();
    }
}

方法二:实现Runnable接口

  利用Runnable接口创建一个线程可执行任务,将此对象放入Thread对象中启动一个线程。

//自定义线程任务
class MyThread implements Runnable{
    @Override
    public void run() {
      //线程启动后执行的代码块
    }
}

//线程启动类
public class ThreadStater {
    public static void main(String[] args) {
        MyThread myThread=new MyThread();
        //将自定义线程可执行任务作为参数创建一个线程
        Thread thread = new Thread(myThread);
        //调用线程对象的start()方法启动线程
        thread.start();
    }
}

方法三:实现Callable接口

  利用Callable接口创建一个任务,将此对象放入对象FutureTask中创建一个线程可执行对象,此对象可以对Callabl任务进行一些监测,之后将FutrueTask对象放入Thread对象中启动一个线程。

//自定义线程任务
class MyThread implements Callable<Integer> {
    @Override
    //call方法可以声明返回值
    public Integer call() throws Exception {
        //线程启动后执行的代码块
        return 0;
    }
}
  
//线程启动类
public class ThreadStater {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyThread myThread = new MyThread();
        //将自定义任务作为参数创建一个线程可执行任务
        FutureTask futureTask=new FutureTask<Integer>(myThread);
        //将线程可执行任务作为参数创建一个线程
        Thread thread=new Thread(futureTask);
        //调用线程对象的start()方法启动线程
        thread.start();
        //通过FurtureTask对象的get()方法可以获得任务返回值
        futureTask.get();
        }
}