程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 線程Thread的基礎知識學習,線程thread基礎知識

線程Thread的基礎知識學習,線程thread基礎知識

編輯:JAVA綜合教程

線程Thread的基礎知識學習,線程thread基礎知識


一.線程的基本概念

  1.線城市一個程序內部的順序控制流。

  2.Java的線程是通過java.lang.Thread類來實現的。

  3.VM啟動時會有一個由主方法{public static void main(Args[] String)}所定義的線程。

  4.可以通過創建新的Thread實例來創建新的線程。

  5.每個線程都是通過某個特定的Thread對象所對應的方法run()來完成其操作的,方法run()稱為線程體。

  6.通過調用Thread類的start()方法來啟動一個線程。

注意:多進程(在操作系統中能同時運行多個任務(程序));多線程(在同一應用程序中有多個順序流同時執行)。

二.線程的建立

  1.定義線程類,實現Runnable接口(推薦,更靈活)

    Thread thread = new Threa(target);   //target為Runnable接口類型;

    Runnable中只有一個方法:public void run();  //用於定義線程運行體。

    *使用Runnable接口可以為多個線程提供共享的數據。

    在實現Runnable接口的類的run方法定義中可以使用Thread的靜態方法:

      public static Thread currentThread() 獲取當前線程的引用。

public class ThreadTheory { public static void main(String args[]){ Runner1 runner1 = new Runner1(); Thread thread = new Thread(runner1); thread.start(); for(int i=0;i<10;i++){ System.out.println("Main Thread:"+i); } } } public class Runner1 implements Runnable { public void run() { for(int i=0;i<10;i++){ System.out.println("Runner1:"+i); } } } View Code

  2.繼承Thread類,重寫run方法:

    class MyThread extends Thread{

      public void run(){......}

    }

    然後生成該類的對象:

      MyThread myThread = new MyThread(...);

public class ThreadTheory { public static void main(String args[]){ Runner2 runner2 = new Runner2(); runner2.start(); //runner2本身就是一個線程了,不用再new Thread(); for(int i=0;i<10;i++){ System.out.println("Main Thread:"+i); } } } public class Runner2 extends Thread { public void run() { for(int i=0;i<10;i++){ System.out.println("Runner2:"+i); } } } View Code

 

三.線程控制的基本方法

     

  sleep(thread.sleep(long millis))

    public static void sleep(long millis) throws InterruptedException
 在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。該線程不丟失任何監視器的所屬權。
  參數:
millis - 以毫秒為單位的休眠時間。
  拋出:
InterruptedException - 如果另一個線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除。

 

  interrupt(thread.interrupt())

    public void interrupt()
  中斷線程。

  如果當前線程沒有中斷它自己(這在任何情況下都是允許的),則該線程的 checkAccess 方法就會被調用,這可能拋出 SecurityException

  如果線程在調用 Object 類的 wait()wait(long)wait(long, int) 方法,或者該類的 join()join(long)join(long, int)sleep(long)sleep(long, int) 方法過程中受阻,則其中斷狀態將被  清除,它還將收到一個 InterruptedException

  如果該線程在可中斷的通道上的 I/O 操作中受阻,則該通道將被關閉,該線程的中斷狀態將被設置並且該線程將收到一個 ClosedByInterruptException

  如果該線程在一個 Selector 中受阻,則該線程的中斷狀態將被設置,它將立即從選擇操作返回,並可能帶有一個非零值,就好像調用了選擇器的 wakeup 方法一樣。

  如果以前的條件都沒有保存,則該線程的中斷狀態將被設置。

  拋出:
SecurityException - 如果當前線程無法修改該線程

  

注意:舒適的結束線程的方法(拒絕暴力):

public class ThreadTheory { public static void main(String args[]){ MyThread myThread = new MyThread(); myThread.start(); try{ Thread.sleep(10000); }catch(InterruptedException e){} myThread.stopThread(); //通過標志去結束線程 } } public class MyThread extends Thread { private boolean flag = true; public void stopThread(){ this.flag = false; } public void run() { while(flag){ System.out.println("===當前時間"+ new Date() + "==="); try{ sleep(1000); }catch(InterruptedException e){ return; } } } } View Code

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved