1. 程式人生 > >18.2 實現線程的兩種方式

18.2 實現線程的兩種方式

pri java虛擬機 run 構造 語法 oid except 方式 reads

一、概述
  在Java中主要提供兩種方式實現線程,分別為繼承java.lang.Thread類與實現java.lang.Runnable接口。

二、繼承Thread類
  a、Thread類是java.lang包中的一個類,從這個類中實例化的對象代表線程,程序員啟動一個新線程需要建立Thread類實例。
  Thread類中常用的兩個構造方法如下:
    public Thread():創建一個新的線程對象。
    public Thread(String threadName):創建一個名稱為threadName的線程對象。
  b、完成線程真正功能的代碼放在類的run()方法中,當一個類繼承Thread類後,就可以在該類中覆蓋run()方法,將實現該線程功能的代碼寫入run()方法中,然後同時調用Thread類中的start()方法執行線程,也就是調用run()方法。
  c、Thread對象需要一個任務來執行,任務是指線程在啟動時執行的工作,該工作的功能代碼被卸載run()方法總。
  run()方法必須使用以下語法格式:
    public void run(){
    }
  d、當執行一個線程程序時,就自動產生一個線程,主方法正式在這個線程上運行的。當不在啟動其它線程是,該程序就是單線程程序,如在本章已簽的程序都是單線程程序。主方法線程啟動有java虛擬機負責,程序員負責啟動自己的線程。
  代碼如下:
    public static void main(String[] args){
      new ThreadTest().start();
    }
註意:(1)、如果start()方法調用一個已經啟動的線程,系統將拋出IllegalThreadStateException異常。
   (2)、在main方法中,使線程執行需要調用Thread類中的start()方法,strat()方法調用被覆蓋的run()方法,如果不調用start()方法,線程永遠都不會啟動,在主方法沒有調用start()方法之前,Thread對象只是一個實例,而不是一個真正的線程。

技術分享圖片
 1 package com.lzw;
 2 
 3 public class ThreadTest extends Thread {    //指定繼承Thread類
 4     private int count = 10;
 5     public void run() {        //重寫run()方法
 6         while(true) {
 7             System.out.print(count + "  ");
 8             if (--count == 0) {
 9                 return;
10             }
11 } 12 } 13 public static void main(String[] args) { 14 new ThreadTest().start(); 15 } 16 }
View Code

技術分享圖片

三、實現Runnable接口

18.2 實現線程的兩種方式