java多线程实现的三种方式

      1.第一种方式:继承Thread类,重写run方法 :(这种方法不是很建议使用因为java只支持单继承)。

      

public class Time extends Thread {
//重写run方法
    public void run(){
        
    }
    public static void main(String[] args) {、
//运行线程 不能直接调用run不然就是方法
        new Time().start();    
    }
}

 

    2:第二种方式:实现实现Runable接口,重写run方法:

    

public class Time implements Runnable {
    @Override
    public void run() {
        System.out.println("12345");
    }
    public static void main(String[] args) {
       var Time= new Time();
        new Thread(Time,"定义线程的名字").start();
    }
}

    

    3:第三种方式:实现Callable接口要实现call方法:

      

public class Time  implements Callable {
    //重写call方法
    @Override
    public Object call() throws Exception {
        System.out.println("我是实现多线程的第三种方式");
        return null;
    }
    public static void main(String[] args) {
        Callable a=new Time();
        //利用FutureTask用来包装一个 Callable 因为这个类实现了Runnable方法
        FutureTask i=new FutureTask(a);
        Thread t=new Thread(i);
        t.start();
    }
}

    最后总结:Thread和Runable都是重写了run方法;但java只支持但继承 所以继承Thread类就不能继承其他类了。

         但Runable很好的解决了这个问题因为java中接口支持多继承。这两个都是没有返回值的。

         Callable接口的实现是将call方法实现然后把Callable封装成FutureTask(这个类可以判断线程执行完毕还是取消执行)

         这三种方式都是通过Thread的start()方法开启。

         这三种方式都可以说本质上都是Runable实现因为 

         1:Thread实现了Runable;

         2:Callable是通过封装成FuntureTask,FutureTask 可以用来包装一个 Callable 或是一个runnable对象。

           因为FurtureTask实现了Runnable方法。

        所以可以说本质是由Runable实现;

         

         

 

posted @ 2021-02-06 21:26  小杰i  阅读(313)  评论(0编辑  收藏  举报