什么是线程

  • 什么是线程?
    线程,有时被称为轻量级进程(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{  
      @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,其他线程不行)

你可能感兴趣的:(什么是线程)