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(); 測試線程是否已經中斷