关闭

Android Runable 与 Thread的联系和区别

516人阅读 评论(0) 收藏 举报
分类:

在Android 中 有两种方法可以实现多线程操作,一种是Runable,另外一种是Thread.

 

他们的不同点:

Runable是一个接口,可以避免只能继承一个父类的限制,可以实现数据共享。但是如果想要多个线程实现自己的功能,则需要用到Thread.

Thread是一个类,他实现了Runable接口。

 

他们占用CPU以及是否开新线程的解释:

Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。

  而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。

  HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。

  与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。

  最后需要说明的是,在UI线程(主线程)中:

  mHandler=new Handler();

  mHandler.post(new Runnable(){

  void run(){

  //执行代码...

  }

  });

  这个线程其实是在UI线程之内运行的,并没有新建线程。

  常见的新建线程的方法是:

  Thread thread = new Thread();

  thread.start();

  HandlerThread thread = new HandlerThread("string");

  thread.start();

 

关于数据共享:

  1. package org.demo.runnable;  
  2. class MyThread implements Runnable{  
  3. private int ticket=10;  
  4. public void run(){  
  5. for(int i=0;i<20;i++){  
  6. if(this.ticket>0){  
  7. System.out.println("卖票:ticket"+this.ticket--);  
  8. }  
  9. }  
  10. }  
  11. }  
  12. package org.demo.runnable;  
  13. public class RunnableTicket {  
  14. public static void main(String[] args) {  
  15. MyThread mt=new MyThread();  
  16. new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一  
  17. new Thread(mt).start();//个实例化对象mt,就会出现异常  
  18. new Thread(mt).start();  
  19. }  
  20. }; 

这样的话,只会显示10个数字,三个Thread共享同一个Runable的属性"ticket",虽然每个线程中,仍然会循环20次,但是他们共用的属性"ticket"只会显示十次。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7465次
    • 积分:170
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:12篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论