『壹』 java中如何給Runnable線程傳參
擦,你在Runnable實現類中定義一個有參數的方法,然後run()方法去調用該方法不就好了
不就相版當於run()方法傳了參權數,
執行方法是在線程的棧中壓入方法幀,所以不存線程安全問題,速度給分
簡單的很呵呵。
『貳』 Java向線程傳遞數據的三種方法
在傳統的同步開發模式下 當我們調用一個函數時 通過這個函數的參數將數據傳入 並通過這個函數的返回值來返回最終的計算結果 但在多線程的非同步開發模式下 數據的傳遞和返回和同步開發模式有很大的區別 由於線程的運行和結束是不可預蘆遲料的 因此 在傳遞和返回數據時就無法象函數一樣通過函數參數和return語句來返回數據 本文就以上原因介紹了幾種用於向線程傳遞數據的方法 在下一篇文章中將介紹從線程中返回數據的方法
欲先取之 必先予之 一般在使用線程時都需要有一些初始化數據 然後線程利用這些數據進行加工處理 並返回結果 在這個過程中最先要做的就是向線程中傳遞數據
一 通過構造方法傳遞數據
在創建線程時 必須要建立一個Thread類的或其子類的實例 因此 我們不難想到在調用start方法之前通過線程類的構造方法將數據傳入線程 並將傳入的數據使用類變數保存起來 以便線程使用(其實就是在run方法中使用) 下面的代碼演示了如何通過構造方法來傳遞數據
package mythread;
public class MyThread extends Thread
{
private String name;
public MyThread (String name)
{
this name = name;
}
public void run()
{
System out println( hello + name);
}
public static void main(String[] args)
{
Thread thread = new MyThread ( world );
thread start();
}
}
由於這種方法是在創建線程對象的同時傳遞數據的 因此 在線程運行之前這些數據就就已經到位了 這樣就不會造成數據在線程運行後才傳入的現象 如果要傳遞更復雜的數據 可以使用集合 類等數據結構 使用構造方法來傳遞數據雖然比較安全 但如果要傳遞的數據比較多時 就會造成很多不便 由於Java沒有默認參數 要想實現類似默認參數的效果 就得使用重載 這樣不但使構造方法本身過於復雜 又會使構造方法在數量上大增 因此 要想避免這種情況 就得通過類方法或類變數來傳遞數據
二 通過變數和方法傳遞數據
向對象中傳入數據一般有兩次機會 第一次機會是在建立對象時通過構造方法將數據傳入 另外一次機會就是在類中定義一系列的public的方法或變數(也可稱之譽裂為欄位) 然後在建立完對象後 通過對象實例逐個賦值 下面的代碼是對MyThread 類的改版 使用了一個setName方法來設置name變數
package mythread;
public class MyThread implements Runnable
{
private String name;
public void setName(String name)
{
this name = name;
}
public void run()
{
System out println( hello + name);
}
public static void main(String[] args)
{
MyThread myThread = new MyThread ();
myThread setName( world );
Thread thread = new Thread(myThread);
thread start();
}
}
三 通過回調函數傳遞數據
上面討論的兩種向慶嘩閉線程中傳遞數據的方法是最常用的 但這兩種方法都是main方法中主動將數據傳入線程類的 這對於線程來說 是被動接收這些數據的 然而 在有些應用中需要在線程運行的過程中動態地獲取數據 如在下面代碼的run方法中產生了 個隨機數 然後通過Work類的process方法求這三個隨機數的和 並通過Data類的value將結果返回 從這個例子可以看出 在返回value之前 必須要得到三個隨機數 也就是說 這個value是無法事先就傳入線程類的
package mythread;
class Data
{
public int value = ;
}
class Work
{
public void process(Data data Integer numbers)
{
for (int n : numbers)
{
data value += n;
}
}
}
public class MyThread extends Thread
{
private Work work;
public MyThread (Work work)
{
this work = work;
}
public void run()
{
java util Random random = new java util Random();
Data data = new Data();
int n = random nextInt( );
int n = random nextInt( );
int n = random nextInt( );
work process(data n n n ); // 使用回調函數
System out println(String valueOf(n ) + + + String valueOf(n ) + +
+ String valueOf(n ) + = + data value);
}
public static void main(String[] args)
{
Thread thread = new MyThread (new Work());
thread start();
}
}
lishixin/Article/program/Java/hx/201311/26623
『叄』 java線程傳值的問題
把那些對象類型的變數定義為 static 類型
或者,有一個線程間傳值得方法,管道技術,不知道你有沒有接觸這方簡尺面的內容:
Java中利用管道實現線程間的通訊
管道(pipe)流搭咐舉是一種特殊的流,用於在不同線程(threads)間直接傳送數據。一個線程發送數據到輸出管道,另知碧一個線程從輸入管道中讀數據。通過使用管道,實現不同線程間的通訊。
你可以搜艘縣官的內容,相信對你有幫助
『肆』 ANDROID,JAVA編程,怎樣才能傳遞參數給線程
你是想說重載?
『伍』 JAVA 多線程傳參問題,為神馬報空指針錯誤
public Test2(Work2 work2) {
this.work=work;
}
這個拆信賣旅逗寫錯坦梁了吧,this.work = work2;
『陸』 java 兩個子線程怎麼傳值線程傳值
用管道可能你不太熟悉,也可以用一個折中辦法:這兩個線程如果出自一個母類體生成並.start的話,可以在母類體中設置一個全局的數組變數,把母類體當成傳輸中介,就可以了。一定能傳到。希望能對你有幫助。
『柒』 java 多線程死循環怎麼動態傳參急!
用繼承的方式實來現Thread類,取名自MyThread,在MyThread裡面加一個屬性 private Thread otherThread;並且給get,set方法.
在run方法裡面的死循環中判斷,if(otherThread!=null){取你要的參數};
這樣一來,在new完thread1和thread2之後,調用thread2.setOtherThread(thread1);
然後再去start.
當然,還要給MyThread加一些屬性存放你要傳遞的參數,在thread1的死循環里操作這些屬性.
『捌』 Java多線程編程,怎樣實現線程間數據的傳遞
可以用Scoket套接字讓伺服器和客戶端建立連接
可以根據Scoket對象的getInputStream()和getOutputStream()獲得輸入輸出流
再往流裡面寫信息
就實現了簡單的數據傳遞
當然等待數據
的時候會有阻塞現象
所以使用線程來保證數據不會因為等待而阻塞
『玖』 JAVA傳參的問題 如何讓多個線程可以調用一個參數
methodA() 要變成 methodA(object xxx) { int i = (int)xxx; } Thread的委託有2個重載,一個是不帶參數,另一個是帶object參數,你還可以: methodA(object xxx) { objecct[] xx = (objecct[])xxx;// 這樣是專傳遞屬多個參數 }
『拾』 java runnable線程如何傳參
Runnable裡面沒有傳參函數,所以得自己造一個
0.自定義一個介面,繼承Runnable,新增一個傳參方法
{
publicMyRunnablesetParam(String...param);
}
實現這個自定義介面
MyRunnablesendMessage=newMyRunnable(){
Stringmessage;
@Override
publicMyRunnablesetParam(String...param){
message=param[0];
returnthis;
}
@Override
publicvoidrun(){
sendMessage(message);
}
};
2.初始化線程池,運行Runnable
=Executors.newCachedThreadPool();
cachedThreadPool.execute(sendMessage.setParam("Iamservice"));
如上所示,線程池調用的一個runnable實例,這個runnable實例傳入了一個字元串參數