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中單繼承帶來的問題。
3、run()方法和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等待該線程終止。