美文网首页
什么是线程

什么是线程

作者: 好大一只鹏 | 来源:发表于2016-09-02 13:07 被阅读0次
    • 什么是线程?
      线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪阻塞运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

    • 如何使用多线程
      1.AsyncTask异步多线程
      AsyncTask的规范型很强,能够时时反映更新的情况
      它一般有这么几个方法

    onPreExecute(), 该方法将在执行实际的后台操作前被UI 线程调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这个方法可以不用实现。
    doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台处理工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
    onProgressUpdate(Progress...),在publishProgress方法被调用后,UI 线程将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
    onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI 线程调用,后台的计算结果将通过该方法传递到UI 线程,并且在界面上展示给用户.

     class TestTask extends AsyncTask<Integer,Integer,String>{  
          @Override    
        protected void onPreExecute() { 
               // main thread ,before doInBackground(); 
               mTextView.setText("加载中");   
             super.onPreExecute();     
       }      
      @Override     
       protected String doInBackground(Integer... params) { 
               // worker thread        
        // download parse xml data    
            return String.valueOf(params[0] * 2 + 2);  
          }      
      @Override  
          protected void onPostExecute(String result) { 
               super.onPostExecute(result);    
            // main thread ,after doInBackground();    
            mTextView.setText("加载完成, 结果是:" + result);     
       } 
       }
    }
    

    2.Actiavity.run.runOnUiThread(new Runnable()

    new Thread(new Runnable() {               // work 线程
     @Override
       public void run() {  
          // 第一种    
         runOnUiThread(new Runnable() {         
        @Override     
            public void run() {    
                 mTextView.setText("我在其它线程中千辛万苦来看你……");             }     
        });
    

    3.View.post(new Runnable)

    mTextView.post(new Runnable() {   
    @Override  
    public void run() {  
        mTextView.setText("我在其它线程中千辛万苦来看你……");   
    }
    }) ;
    

    4.View.postDelayed(Runnable,long)

    mTextView.postDelayed(new Runnable() {
        @Override  
      public void run() {   
         mTextView.setText("我在其它线程中千辛万苦来看你……");   
     }
    },1000);
    

    5.Handler 机制,它是Runnable和Activity交互的桥梁,在run方法中发送Message,在Handler里,通过不同的Message执行不同的任务。
    (Handler的设计实际上是为了应用程序内其他线程和主线程进行通信,因为只有主线程才能更新UI,其他线程不行)

    相关文章

      网友评论

          本文标题:什么是线程

          本文链接:https://www.haomeiwen.com/subject/szwhettx.html