Android Runable 与 Thread的联系和区别

原创 2013年12月05日 16:17:54

在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"只会显示十次。

 

Runable和thread的区别(多线程必须用Runable)

看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案.   网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了.   Java中有两种实现多线程的方式。一是...
  • jaakov2010
  • jaakov2010
  • 2016年10月06日 18:01
  • 772

两种线程:Runable与Thread区别详解

前言:由于毕业
  • harvic880925
  • harvic880925
  • 2014年07月17日 10:41
  • 3458

JAVA多线程之Runnable和Thread比较

在我们开发的过程中常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Runnable接口、继承Thread类。对于这两种多线程的实现方式也是有着一些差异。既然实现了多线程那必然离不开管理这些...
  • u013755987
  • u013755987
  • 2016年07月11日 21:15
  • 8593

【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下...
  • mmc_maodun
  • mmc_maodun
  • 2013年12月06日 10:15
  • 37099

Runnable接口与Thread类的区别

什么时候让线程实现Runnable接口,什么时候让线程继承Thread类? JDK帮助文档中的原话:Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现 (不明白是啥意思) 孙鑫...
  • colder2008
  • colder2008
  • 2013年12月27日 17:35
  • 1543

Runable和thread的区别(多线程必须用Runable)

看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案.   网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了.   Java中有两种实现多线程的方式。一是...
  • ysh512
  • ysh512
  • 2016年06月13日 23:23
  • 193

Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余!

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()...
  • yanzi1225627
  • yanzi1225627
  • 2013年02月16日 00:47
  • 29566

Runable和thread的区别(多线程必须用Runable)

看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案.   网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了.   Java中有两种实现多线程的方式。一是...
  • goodmentc
  • goodmentc
  • 2015年05月07日 14:14
  • 527

Runable和thread的区别(多线程必须用Runable)

原文地址:点击打开链接 看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案.  网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了.  Java中有两种实现多线...
  • zs492761271
  • zs492761271
  • 2016年12月21日 10:10
  • 201

Runable和thread的区别(多线程必须用Runable)

Runable和thread的区别(多线程必须用Runable) Java中有两种实现多线程的方式以及两种方式之间的区别 看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案.  网...
  • kirrin
  • kirrin
  • 2014年02月14日 15:57
  • 509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Runable 与 Thread的联系和区别
举报原因:
原因补充:

(最多只允许输入30个字)