[Android] Handler ,Thread,Runnable的关系

本文详细探讨了Android中Thread、Runnable和Handler之间的关系及其使用。介绍了线程阻塞的原因,强调了start()方法启动线程与run()直接执行的区别。讲解了多线程的实现方式,包括实现Runnable接口、继承Thread类和使用Callable/Future。通过实例展示了Runnable如何实现线程共享资源,解释了为何需要同步操作避免线程安全问题。同时,还讨论了Handler在多线程中更新UI的重要性,给出了Handler.post()和sendMessage()的用法示例。
摘要由CSDN通过智能技术生成

一  Thread

1. 导致线程阻塞:

  1. 调用sleep(毫秒数),使线程进入“sleep"状态。在规定的时间内,这个线程是不会运行的。
  2. 调用suspend() 暂停了线程的执行。除非线程收到resume()消息,否则 不会返回”可运行“状态。
  3. 调用wait() 暂停了线程的执行。除非线程收到nofify()或者notifyAll()消息,否则不会变成“可运行”。
  4. 线程正在等候一些IO(输入输出)操作完成。
  5. 线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

 2. sleep和wait有什么区别?

  • sleep()方法:属于Thread类,导致此线程暂停执行指定时间,将执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复(线程回到就绪(ready)状态),因为调用sleep 不会释放对象锁。
  • wait()方法:则是属于Object类,对此对象调用wait()方法导致本线程放弃对象锁(线程暂停执行),进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后,本线程才进入对象锁定池准备获得对象锁进入就绪状态。

3. 启动一个线程是用run()还是start()?

start()方法:启动一个线程,使线程就绪状态,以后可以被调度为运行状态

class MyThread extends Thread{
    private String name;
    public MyThread(String name){
        super();
                this.name=name;
    }
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println("线程开始:"+this.name+".i="+i);
        } 
    }
}

public class ThreadDemo2{
    public static void main(String[] args){
                MyThread mt1= new MyThread("线程a");
               MyThread mt2=new MyThread("线程b");
               mt1.start();
               mt2.start();

   }

}

run()方法:是该线程所关联的具体执行代码

class MyThread extends Thread{
    private String name;
    public MyThread(String name){
        super();
                this.name=name;
    }
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println("线程开始:"+this.name+".i="+i);
        } 
    }
}

public class ThreadDemo1{
       public static void main(String[] args){
                MyThread mt1= new MyThread("线程a");
                MyThread mt2=new MyThread("线程b");
                mt1.run();
                mt2.run();

 }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值