Java 实现多线程Thread Runnable Callable 三种方式

Java 多线程

Thread Runnable  Callable 三种方式区别
1.Thread创建多线程特点

因为继承Thread类,所有无法再继承其他类了。

2.Runnable 和Callable创建多线程特点

因为线程只实现Runable 或Callable接口,可以继续继承或实现其他类。

Callable有执行返回值,而Runable 和Thread 无返回值

1. 继承Thread重写 run方法。

 

public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);

        //1.继承 Thread 重写 run方法
        Thread runThread = new Thread(){
            @Override
            public void run(){
                System.out.println(Thread.currentThread().getName()
                        +"@@@@@@@@@继承 Thread 重写 run方法@@@@@@@@@@@@");
            }
        };
        runThread.start();
        //1.继承 Thread 重写 run方法
        new Thread1().start();
    }
}
//继承 Thread 重写 run方法
class Thread1 extends Thread{
    @Override
    public void run(){
        System.out.println(Thread.currentThread().getName()
                +"@@@@@@@@@继承 Thread 重写 run方法@@@@@@@@@@@@");
    }
}

 

执行结果:

Thread-11@@@@@@@@@继承 Thread 重写 run方法@@@@@@@@@@@@
Thread-12@@@@@@@@@继承 Thread 重写 run方法@@@@@@@@@@@@

 

2.实现Runnable的run方法。

public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        //2.实现Runnable 实现 run 方法
        Thread runnableThread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()
                                +"##########继承 Thread 重写 run方法############");
            }
        });
        runnableThread.start();
        //2.实现Runnable 实现 run 方法
        new Thread(new Thread2()).start();
    }
}
//实现Runnable 实现 run 方法
class Thread2 implements Runnable{
    @Override
    public void run(){
        System.out.println(Thread.currentThread().getName()
                +"##########继承 Thread 重写 run方法############");
    }
}

执行结果:

Thread-11##########继承 Thread 重写 run方法############
Thread-12##########继承 Thread 重写 run方法############

3.实现Callable的call方法。

 

public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);

        //3.实现Callable call方法
        FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                System.out.println(Thread.currentThread().getName()
                        +"$$$$$$$$$$$实现Callable call方法$$$$$$$$$$$$$$");
                return null;
            }
        });
        new Thread(futureTask).start();
        //3.实现Callable call方法
        FutureTask<String> futureTaskCallable = new FutureTask<>(new Callable1());
        new Thread(futureTaskCallable).start();
    }
}

//实现Callable call方法
class Callable1 implements Callable<String>{
    @Override
    public String call(){
        System.out.println(Thread.currentThread().getName()
                +"$$$$$$$$$$$实现Callable call方法$$$$$$$$$$$$$$");
        return null;
    }
}

 

执行结果:

Thread-10$$$$$$$$$$$实现Callable call方法$$$$$$$$$$$$$$
Thread-11$$$$$$$$$$$实现Callable call方法$$$$$$$$$$$$$$

 

posted @ 2018-11-15 15:39  姜秋实  阅读(1016)  评论(0编辑  收藏  举报