1)Runnable和Callable同是接口

* Callable的任务执行后可返回值,而Runnable的任务是不能返回值(是void);call方法可以抛出异常,run方法不可以
* 运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。
* 加入线程池运行,Runnable使用ExecutorService的execute方法,Callable使用submit方法。

2)Thread类和Runnable接口

基于java的单继承限制,这两者第一个区别:

* 避免java单继承的局限性

* runnable接口可以自动实现资源的共享,对于Thread类,如果想要实现共享,需要将共享资源变成静态资源。这一点以卖票案例为例,如下:

继承Thread类

 1 class ExtendsThreadextends Thread{
 2         private  int ticket = 5;
 3         private String name;
 4         public FirstThread(String name){
 5             this.name = name;
 6         }
 7         public void run(){
 8             for(int i=0;i<10;i++){
 9                 if(ticket > 0){
10                     System.out.println("继承Thread-->"+name +" 卖票: "  + (ticket--));
11                 }
12             }
13         }
14     }
15 public class InitThread {
16     public static void main(String[] args) {
17                 new ExtendsThreadextends ("一号窗口").start();
18                 new ExtendsThreadextends ("二号窗口").start();
19                 new ExtendsThreadextends ("三号窗口").start(); 
20         }
21 }       
View Code

相关文章:

  • 2021-11-23
  • 2021-06-11
  • 2022-01-01
  • 2021-04-29
  • 2021-11-28
  • 2022-01-08
  • 2021-11-23
  • 2021-06-05
猜你喜欢
  • 2021-04-15
  • 2021-06-10
  • 2022-12-23
  • 2021-11-29
  • 2021-11-24
  • 2022-12-23
相关资源
相似解决方案