java多線程總結

java的多線程技術相對來說還是比較好的,下面就簡單的做個總結吧!由於本人也沒什麼經驗,不到之處望各位博友海涵,諒解,糾正指出!

首先是如何創建線程,總的來說有兩種方式來創建線程,

1、繼承Thread類,重寫Thread類的run()方法,例如:class T extends Thread{},然後實例化該類對象,T t=new T(); 因爲T繼承自Thread類,t可以直接調用start()方法,然後JVM就會自動調用該類重寫的run()方法,啓動一個線程。

上面創建線程的方法雖然看起來挺好的,但是java中不允許多重繼承,如果想多繼承幾個類,那就麻煩了,所以有了下面第2種創建線程的方法

2、實現Runnable接口,創建線程

Runnable接口中只有一個方法,那就是run()方法。例如,class R implements Runnable{},

首先要實例化R,即:R r=new R(); Thread tr=new Thread(r); tr.start();這樣就可以啓動一個線程。

建議最好使用實現Runnable接口這個方式來創建線程,以避免java中單繼承帶來的問題。

3run()方法和start()方法的區別   方法調用和線程啓動

直接調用run()方法就會等到run()中的內容執行完後,再回去執行main方法;

而用strat()啓動線程,進入就緒狀態,JVM就會調用線程的run()方法,和main方法交替執行

run()結束,線程就結束。

4、wait  sleep區別:
wait時別的線程可以訪問鎖定對象 (調用wait方法的時候必須鎖定該對象)

Wait方法在java.lang.Object中,是Object類的方法,


sleep時別的線程也不可以訪問鎖定對象

5、線程同步:

synchronized(this){
 .......
 ......
}
當執行這段代碼的過程中鎖定當前對象

6、常用方法:

public static void yield()     暫停當前正在執行的線程對象,並執行其他線程。
public static Thread currentThread()    返回對當前正在執行的線程對象的引用。
public static void sleep(long millis)
                  throws InterruptedException        在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。該線程不丟失任何監視器的所屬權。
public final void setPriority(int newPriority)       更改線程的優先級。
public final int getPriority()        返回線程的優先級。

Thread.currentThread()----------------->拿到當前線程

public static Thread currentThread()返回對當前正在執行的線程對象的引用。

public final void join()throws InterruptedException等待該線程終止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章