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方法$$$$$$$$$$$$$$