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

 

相关文章推荐

thread和runable的区别

1.runable我实验了一下,同时new了3个LiftOff,他们还是按照顺讯打印出来的,且线程名都是main,线程id也相同。说明直接用run方法是借用主线程来运行程序的,且会排队来运行。代码比较...

Thread 和 Runable 区别

首先 Thread是类,Runable是接口。 一是写一个类继承自Thread类,然后重写里面的run方法,用start方法启动线程 二是写一个类实现Runnable接口,实现里面的run方法,用ne...

Java中Thread和runable的区别

线程的起动并不是简单的调用了你的RUN方法,而是由一个线程调度器来分别调用你的所有线程的RUN方法, 我们普通的RUN方法如果没有执行完是不会返回的,也就是会一直执行下去,这样RUN方法下面的方法就...
  • lbp889
  • lbp889
  • 2014年11月09日 22:15
  • 249

JAVA知识回顾-5(Interface与abstract类的介绍、Static class与not static class的区别、java多态的实现原理、Thread与Runable)

JAVA知识回顾-第五天Interface与abstract类的介绍 Final和abstract永远不会同时出现 abstract和static不能放在一起,否则便会出现错误(这是因为static不...

Java多线程Thread类和Runable接口的区别以及线程类详解

在Java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()...

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

转载的一篇,原文地址:《Android开发笔记之:Handler Runnable与Thread的区别详解》 正文: 一、Thread方法 在java中可有两种方式实现多...

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

前言:由于毕业

Thread和Runable的区别、Synchronized锁关键字

一、Thread和Runable的区别 Thread是基类,子类必继承他实现其run方法。其也是实现了Runable接口。Thread是普通的类,并非抽象类或者密封类等。Runnable是接口,...

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

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

android的Thread、Runnable、Asyntask的区别与联系

Android中的UI主线程不是线程安全的。开发人员必须注意以下两点: 1.更新UI界面的操作必须在UI主线程中进行 2.耗时操作不能在UI主线程中进行,否则会出现ANR错误 那么如果我要完成一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Runable 与 Thread的联系和区别
举报原因:
原因补充:

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