Android——Runnable和Thread,进阶:Callable接口 / Runnable接口 / Future接口

1. 简介:Runnable和Thread

为什么要有,Callable接口和Runnable接口?

我们知道创建线程的方式有两种,一种是实现Runnable接口,另一种是继承Thread,但是这两种创建线程的方式都有个问题,执行完任务后无法获取返回结果,于是,就有了Callable接口和Runnable接口。

看看创建线程的两个方法:

Class MyThread extends Thread{
   
      @Override
           Void run(){
   
}
}
new MyThread().start();
Class MyTask implements Runnable {
   
      Void run(){
   }          
}
new Thread( new MyTask()).start();

顺便说下:

  • new MyThread().start():会启动一个线程执行run方法
  • new MyThread().run();:在本线程中执行run方法

那么Runnable和Thread有什么区别呢其实这二者本身就没有本质区别,就是接口和类的区别!!

  • 创建线程的方式有两种,一种是实现Runnable接口,另一种是继承Thread。
  • Runnable接口支持多继承,但基本上用不到,就是接口的特性而已。
  • Thread实现了Runnable接口并进行了扩展,而Thread和Runnable的实质是实现的关系,不是同类东西,所以Runnable或Thread本身没有可比性。

目前网络上其实流传着一个谬论:Runnable更容易可以实现多个线程间的资源共享,而Thread不可以!
网上的例子:
program–Thread:

//program--Thread
public class Test {
   
    public static void main(String[] args) {
   
        // TODO Auto-generated method stub
 
        new MyThread().start();
        new MyThread().start();
 
    }
 
 
     static class MyThread extends Thread{
   
        private int ticket = 5;
        public void run(){
   
            while(true){
   
                System.out.println("Thread ticket = " + ticket--);
                if(ticket < 0){
   
                    break;
                }
            }
        }
    }
}
//结果:
Thread ticket = 5
Thread ticket = 5
Thread ticket = 4
Thread ticket = 3
Thread ticket = 2
Thread ticket = 1
Thread ticket = 0
Thread ticket = 4
Thread ticket = 3
Thread ticket = 2
Thread ticket = 1
Thread ticket = 0
Process finished with exit code 0

program–Runnable:

//program--Runnable
public class Test2 {
   
    public static void main(String[] args) {
   
        // TODO Auto-generated method stub
        MyThread2 mt=new MyThread2();
        new Thread(mt).start();
        new Thread(mt).start();
 
 
    }
    static class MyThread2 implements Runnable{
   
        private int ticket = 5;
        public void run(){
   
            while(true){
   
                System.out.println("Runnable ticket = " + ticket--);
                if(ticket < 0){
   
                    break;
                }
            }
        }
    }
}

//结果:
Runnable ticket = 5
Runnable ticket = 4
Runnable ticket = 3
Runnable ticket = 1
Runnable ticket = 0
Runnable ticket =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值