1. C#除了thread.sleep()的延時方法,還有什麼延時方法
java是跨平台的,理論上不存在有方法在windows上可以而在linux上不行。你這個可能是你的兩個地方JDK或tomcat環境的問題,或者是出現了其他錯誤,導致linux上沒有運行到sleep那一步,或者是代碼沒有更新到linux上去。
2. Java中Runnable和Thread的區別
Runnable介面和Thread類是java中實現多線程的兩種方法。主要區別在於:Thread是類,而Runnable是介面。
抽象類和介面的區別如下:
1. 在類來繼承抽象類時,只需實現部分具體方法和全部抽象方法,而實現介面則要實現裡面的全部方法。
2. 在介面中無成員變數,而抽象類中可有成員變數。
在Java中引進介面主要是為了解決多繼承的問題,實現多線程主要繼承Thread 類和實現Runnable介面。
3. 如何在 Thread
在一個Android 程序開始運行的時候,會單獨啟動一個Process。
默認的情況下,所有這個程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的兩種, 除此之外還有Content Provider和Broadcast Receiver)都會跑在這個Process。一個Android 程序默認情況下也只有一個Process,但一個Process下卻可以有許多個Thread。
在這么多Thread當中,有一個Thread,我們稱之為UI Thread。
UI Thread在Android程序運行的時候就被創建,是一個Process當中的主線程Main Thread, 主要是負責控制UI界面的顯示、更新和控制項交互。
在Android程序創建之初,一個Process呈現的是單線程模型,所有的任務都在一個線程中運行。因此,我們認為,UI Thread所執行的每一個函數,所花費的時間都應該是越短越好。而其他比較費時的工作(訪問網路,下載數據,查詢資料庫等),都應該交由子線程去執行,以免阻塞主線程。
那麼,UI Thread如何和其他Thread一起工作呢?常用方法是:
1.誕生一個主線程的Handler物件,當做Listener去讓子線程能將訊息Push到主線程的Message Quene里,以便觸發主線程的handlerMessage()函數,讓主線程知道子線程的狀態,並在主線程更新UI。
2.在子線程的狀態發生變化時,我們需要更新UI。
如果在子線程中直接更新UI,通常會拋出下面的異常:
ERROR/JavaBinder(1029):android.view.ViewRoot$:Only the original thread that created a view hierarchy can touch its views.
意思是,無法在子線程中更新UI。
3.我們需要通過Handler物件,通知主線程Ui Thread來更新界面。
如下:
3.1 首先創建一個Handler,來監聽Message的事件:
private final int UPDATE_UI = 1;
private Handler mHandler = new MainHandler();
private class MainHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI: {
Log.i("TTSDeamon", "UPDATE_UI");
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}
3.2
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI: {
Log.i("TTSDeamon", "UPDATE_UI");
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}
當子線程的狀態發生變化,則在子線程中發出Message,通知更新UI。
mHandler.sendEmptyMessageDelayed(UPDATE_UI, 0);
4. 在我們的程序中,很多Callback方法有時候並不是運行在主線程當中的,所以如果在Callback方法中更新UI失敗,也可以採用上面的方法。
4. java 中使用線程的方法到底有哪些
都是通過new Thread().start()開啟線程,一般有兩種方式:1是繼承自Thread類,2是實現Runnable介面,第二種方式更加靈活,Java不支持多繼承,但是支持多實現。求採納
5. 1. 寫出用Java編寫多線程程序的兩種常用方法
1、繼承Thread,然後生成對象
2、用類A實現runable介面,然後用你實現runnable的類A,生成Thread對象 Thread(A對象);
API 上說明如下:
創建新執行線程有兩種方法。一種方法是將類聲明為 Thread 的子類。該子類應重寫 Thread 類的
run 方法。接下來可以分配並啟動該子類的實例。例如,計算大於某一規定值的質數的線程可以寫成:
classPrimeThreadextendsThread{
longminPrime;
PrimeThread(longminPrime){
this.minPrime=minPrime;
}
publicvoidrun(){
//
...
}
}
然後,下列代碼會創建並啟動一個線程:
PrimeThreadp=newPrimeThread(143);
p.start();
創建線程的另一種方法是聲明實現 Runnable 介面的類。該類然後實現 run
方法。然後可以分配該類的實例,在創建 Thread 時作為一個參數來傳遞並啟動。採用這種風格的同一個例子如下所示:
implementsRunnable{
longminPrime;
PrimeRun(longminPrime){
this.minPrime=minPrime;
}
publicvoidrun(){
//
...
}
}
然後,下列代碼會創建並啟動一個線程:
rimeRunp=newPrimeRun(143);
newThread(p).start();
6. Thread的基本定義
為了正確有效地使用線程,必須理解線程的各個方面並了解Java實時系統。必須知道如何提供線程體、線程的生命周期、實時系統如 何調度線程、線程組、什麼是幽靈線程(Demo nThread)。
7. java 線程 有幾種創建方法啊 最常用的是哪種啊
繼承Thread類和實現Runnable介面
第二種常用。因為如果繼承自Thread類的話,java是單繼承機制所以就沒有辦法再繼承其他類了。而實現Runnable介面則還可以再繼承其他的類。
8. java中runnable和thread的區別
Runnable介面和Thread類是java中實現多線程的兩中方法。
Thread類的構造方法有8個,但常用的只有4個,分別為:
Thread類中的兩個最主要的方法:
(1)run()—包含線程運行時所執行的代碼,即線程需要完成的任務,是線程執行體。
(2)start()—用於啟動線程。
實現Runnable介面的類必須使用Thread類的實例才能創建線程。通過實現Runnable介面來創建並啟動多線程的步驟:
9. 多線程實現的幾種常用的方法
有三種:
(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的類都是可被其它線程執行的任務。
Callable和Runnable有幾點不同:
①Callable規定的方法是call(),而Runnable規定的方法是run().
②Callable的任務執行後可返回值,而Runnable的任務是不能返回值的
③call()方法可拋出異常,而run()方法是不能拋出異常的。
④運行Callable任務可拿到一個Future對象,Future表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等
待計算的完成,並檢索計算的結果.通過Future對象可了解任務執行情況,可取消任務的執行,還可獲取任務執行的結果