java創建線程的三種方式
❶ java有幾種實現線程的方式
有三種:
(1)繼承Thread類,重寫run函數
創建:class xx extends Thread{ public void run(){Thread.sleep(1000) //線程休眠1000毫秒,sleep使線程進入Block狀態,並釋放資源}}
開啟線程:對象.start() //啟動線程,run函數運行
(2)實現Runnable介面,重寫run函數
開啟線程:Thread t = new Thread(對象) //創建線程對象t.start()
(3)實現Callable介面,重寫call函數
Callable是類似於Runnable的介面,實現Callable介面的類和實現Runnable的類都是可被其它線程執行的任務。
❷ java怎麼創建一個線程
Java線程類也是一個object類,它的實例都繼承自java.lang.Thread或其子類。可以用如下方式用java中創建一個線程:
Treadthread=newThread();
執行該線程可以調用該線程的start()方法:
thread.start();
編寫線程運行時執行的代碼有兩種方式:一種是創建Thread子類的一個實例並重寫run方法,第二種是創建類的時候實現Runnable介面。接下來我們會具體講解這兩種方法:
創建Thread的子類
創建Thread子類的一個實例並重寫run方法,run方法會在調用start()方法之後被執行。例子如下:
{
publicvoidrun(){
System.out.println("MyThreadrunning");
}
}
可以用如下方式創建並運行上述Thread子類
MyThreadmyThread=newMyThread();
myTread.start();
一旦線程啟動後start方法就會立即返回,而不會等待到run方法執行完畢才返回。就好像run方法是在另外一個cpu上執行一樣。當run方法執行後,將會列印出字元串MyThread running。
實現Runnable介面
第二種編寫線程執行代碼的方式是新建一個實現了java.lang.Runnable介面的類的實例,實例中的方法可以被線程調用。下面給出例子:
{
publicvoidrun(){
System.out.println("MyRunnablerunning");
}
}
為了使線程能夠執行run()方法,需要在Thread類的構造函數中傳入MyRunnable的實例對象。示例如下:
Threadthread=newThread(newMyRunnable());
thread.start();
當線程運行時,它將會調用實現了Runnable介面的run方法。上例中將會列印出」MyRunnable running」。
❸ 如何創建線程如何保證線程安全
在java中如果要創建線程的話,一般有兩種方式:
1.繼承Thread類;
2.實現Runnable介面。
1.使用線程安全的類;
使用synchronized同步代碼塊,或者用Lock鎖;
多線程並發情況下,線程共享的變數改為方法局部級變數;
線程安全:
線程安全就是多線程訪問時,採用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。 線程不安全就是不提供數據訪問保護,有可能出現多個線程先後更改數據造成所得到的數據是臟數據。
一般說來,確保線程安全的方法有這幾個:競爭與原子操作、同步與鎖、可重入、過度優化。
個人認為,保證線程安全,無外乎保持線程同步的方式,
如:@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。
然而:
OSSpinLock和dispatch_semaphore的效率遠遠高於其他。
@synchronized和NSConditionLock效率較差。
鑒於OSSpinLock的不安全,所以我們在開發中如果考慮性能的話,建議使用dispatch_semaphore。
如果不考慮性能,只是圖個方便的話,那就使用@synchronized。
如何保證呢:
由於線程安全問題,使用synchronized同步代碼塊 原理:當兩個並發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。 另一個線程必須等待當前線程執行完這個代碼塊以後才能執行該代碼塊。
作者:squirrels
鏈接:https://www.jianshu.com/p/221df4cd63da
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
❹ 創建線程有幾種方式和Java中常用的線程池
java創建線程的方式有三種
第一種是繼承Thread類 實現方法run() 不可以拋異常 無返回值
第二種是實現Runnable介面 實現方法run() 不可以拋異常 無返回值
第三種是實現Callable<T>介面,介面中要覆蓋的方法是 public <T> call() 注意:此方法可以拋異常,而前兩種不能 而且此方法可以有返回值
第三種如何運行呢 Callable介面在util.concurrent包中,由線程池提交
import java.util.concurrent.*;
ExecutorService e = Executors.newFixedThreadPool(10); 參數表示最多可以運行幾個線程
e.submit(); 這個裡面參數傳 實現Callable介面那個類的對象
❺ JAVA面試題 JAVA中創建線程有幾種不同的方式
第一種方式:使用Runnable介面創建線程
第二種方式:直接繼承Thread類創建對象
使用Runnable介面創建線程
1.可以將CPU,代碼和數據分開,形成清晰的模型
2.線程體run()方法所在的類可以從其它類中繼承一些有用的屬性和方法
3.有利於保持程序的設計風格一致
直接繼承Thread類創建對象
1.Thread子類無法再從其它類繼承(java語言單繼承)。
2.編寫簡單,run()方法的當前對象就是線程對象,可直接操作。
在實際應用中,幾乎都採取第一種方式
❻ 如何創建線程如何保證線程安全
不可變 在java語言中,不可變的對象一定是線程安全的,無論是對象的方法實現還是方法的...
2.絕對線程安全 絕對的線程安全完全滿足Brian GoetZ給出的線程安全的定義,這個定義...
3.相對線程安全 相對線程安全就是我們通常意義上所講的一個類是「線程安全」的。 它需要保證對...
4.線程兼容 線程兼容就是我們通常意義上所講的一個類不是線程安全的。 線程兼容是指對象本身並...