java 多線程,sleep()和wait()


java 線程可謂是java中重要的一個機制,在說線程之前需要知道什么是進程,進程和線程的關系是是什麽?

1.什么是進程?什么是線程?

  進程:用句簡單的粗俗的來說,進程就是程序。進程是一個正在運行的程序!比如:打開一個記事本程序,那么這個正在運行的記事本程序就是一個進程。

  線程:線程是由進程所創建來執行某個功能的一個機制。那么也就是說,沒有進程就沒有線程。一個線程只能對應一個進程,一個進程卻可以有多個線程的存在。

 

2.那么在java中如何創建一個線程?

  在java中創建線程有兩個方法:

    一:通過類繼承Thread實現線程創建。

    例:class Thread1 extends Thread {

        public void run() {

          System.out.println("hello, the world!");

        }

      }

      public class Text {

        public void main(String[] args) {

            new Thread1().start();

        }

      }

  二:通過實現Runnable來創建線程

  例:class Tread2 implements Runnable {

      public void run() {

        System.out.println("wellcome to Java world!");

      }

    }

 

    public void Text {

      public void main(String[] args) {

        new Thread(new Thread2()).start();

      }

    }

  同樣兩種方法都可以通過匿名內部類的方式創建線程。

3. sleep()和wait()是什麽?他們有什么區別,對同步有什么影響。

  sleep():是線程的一個睡眠方法,它可以接收long類型的參數作為睡眠的時間!當線程運行該方法時,線程會進入睡眠狀態,把cpu時間片讓出給其他線程使用。當參數時間之后,線程會自動喚醒,等待下一個時間片段繼續執行。在睡眠期間,sleep()不會釋放線程鎖,也就是或,該線程所訪問的同步塊會一直被該線程占用,別的線程無法訪問,直到線程重新啟動,並釋放線程鎖。

  wait():是屬於Object的類,wait()和sleep()都是使線程進入睡眠狀態,但是wait()需要別的線程去使用Thread.notify()喚醒被wait()睡眠的線程,否則線程會一直處於睡眠狀態,知道程序關閉。如果該線程正占用着同步資源,那么一直不喚醒,就會導致同步資源無法訪問,避免這樣,所以當wait()睡眠的線程會釋放線程鎖,讓出cpu時間片段,當被喚醒的時候,該線程會重新等待下一次時間片段,重新進入同步塊。

4.幾個常用的線程方法

  Thread th = Thread.currentThread();  用於獲取運行當前代碼片段的線程

  long getId()  返回該線程的標識符

  String getName()  返回該線程的名稱

  int getPriority()  返回線程的優先級

  Thread.state getState();  獲取線程的狀態

  boolean isAlive();  測試線程是否處於活動狀態

  boolean isDaemon();  測試線程是否為守護線程

  boolean isInterrupted();  測試線程是否已經中斷

 

 

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM