Java实现多线程的三种方式

2018-06-09  本文已影响0人  hiTsung

1. 继承Thread类

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
}

class MyThread extends Thread{
    public void run(){
        System.out.print("Thread Body");
    }
}

继承Thread后,调用start()方法就是执行类类中的run()方法,这也是启动线程的唯一方法。它是一个native方法,当此方法调用以后并不是马上就执行多线程代码,而是把该线程变为可运行Runnable状态,什么时候执行则由操作系统决定。

2. 实现Runnable接口

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        Thread thread = new Thread(myThread);
        thread.start();
}

class MyThread extends otherClass implements Runnable{
    public void run(){
        System.out.print("Thread Body");
    }
}

当类已经继承于别的类而不能继承Thread类时,可以使用实现Runnable接口的方法。但是在这种方法下,要先创建Thread对象,用实现Runnable接口的对象作为参数实例化该Thread对象。

3. 实现Callable接口,重写call()方法

Callable 对象实际属于Executor框架中的功能类,Callable接口和Runnable接口类似,但功能更强大

public class Main {
    public static void main(String[] args) {
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        Future<String> future = threadPool.submit(new MyThread());
        try{
            System.out.println("Waiting thread to finish");
            System.out.println(future.get());
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

class MyThread implements Callable<String>{
    public String call() throws Exception{
        return "Thread Body";
    }
}
上一篇下一篇

猜你喜欢

热点阅读