Java线程创建的几种方式

一、java线程创建的三种方式?

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
    代码如下:
class MyThreadDemo extends Thread{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("thread start...");
    }
}

class MyRunnableDemo implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("thread start...");
    }

}

// 泛型中的类型为call返回的类型;这种实现方式可以有返回值;
class MyCallableDemo implements Callable<String>{

    @Override
    public String call() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("thread start...");
        return "thread stop";
    }

}

// 测试代码
public class ThreadTest{
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 测试继承Thread;
        MyThreadDemo threadDemo = new MyThreadDemo();
        threadDemo.start(); 

        // 测试实现Runnable接口;
        MyRunnableDemo myRunnableDemo = new MyRunnableDemo();
        new Thread(myRunnableDemo).start();

        // 测试实现Callable接口;
        MyCallableDemo myCallableDemo = new MyCallableDemo();
        // 使用FutureTask来包装Callable对象;
        FutureTask<String> task = new FutureTask<String>(myCallableDemo);
        new Thread(task).start();
        try {
            // get()方法会等待线程执行结束;
            System.out.println(task.get());
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
}

三种创建方式的对比:
采用两种实现接口的方式创建线程
优点 1、实现接口同时还可以继承其他类;2、多个线程可以共享同一个target对象,所以非常适合多个相同的线程来处理同一份资源的情况。
推荐:一般推荐采用实现接口的方式来创建线程。

猜你喜欢

转载自blog.csdn.net/u010349644/article/details/49176135