[英]Threads in java
int iThreadCount = 1;
iThreadCount = GHMTreadUtil.getHygThreadCount();
arrHygThread = new Thread[iThreadCount];
for(int iCount=0;iCount<iThreadCount;iCount++)
{
LogMgr.logDebugInfo("spawning the HYG Thread"+iCount,objDebug);
Job1 objJob1=new Job1 ();
Job2 objJob2 =new Job2 ();
Thread objHygThread = new Thread(objJob1,objJob2);
arrHygThread[iCount]=objHygThread;
objHygThread.start();
}
如果我想為下面指定的2個作業創建線程Thread objHygThread = new Thread(objJob1,objJob2);
我需要進口什么東西嗎? 如果有人知道答案,那么請告訴我。
提前致謝。
Thread
通常使用java.lang.Runnable
作為參數,並且一次只能使用一個Runnable
。 因此,您需要啟動兩個線程:
Thread objHygThread1 = new Thread(objJob1);
Thread objHygThread2 = new Thread(objJob2);
Job
類實現Runnable
接口。
一個線程只需要一個可運行的線程。 如果您有兩個可運行對象,則將需要兩個線程,或者自己在一個Thread對象中的另一個可運行對象中管理這兩個可運行對象。
我還將參考您對上一個問題和ThreadPoolExecutor的回答 。 ThreadPoolExecutor不保證對提供給它的作業進行排序。 如果需要,那么您應該自己管理這些文件的運行。
一定要看一看新的java.util.concurrent類,它們使並發編程變得更加容易且不易出錯。 這是夏威夷大學演講中的一個相關示例:
public class Task implements Runnable {
private String message;
private int iterations;
public Task(String s, int n) {
message = s; iterations = n;
}
public void run() {
for (int i=0; i < iterations; i++) {
System.out.println(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) { }
}
}
}
java.util.concurrent.*;
. . .
ExecutorService pool;
pool = Executors.newFixedThreadPool(3);
pool.execute(new Task(“three”,3));
pool.execute(new Task(“two”,2));
pool.execute(new Task(“five”,5));
pool.execute(new Task(“six”,6);
pool.execute(new Task(“one”,1);
pool.shutdown();
這將形成一個包含三個線程的池,然后向該池提供五個要執行的任務。
我強烈建議您看一下Java Executor接口 。
將線程管理和創建與應用程序的其余部分分開是有意義的。 封裝這些功能的對象稱為執行程序。 以下小節詳細介紹了執行程序。
final Job1 objJob1 = new Job1 ();
final Job2 objJob2 = new Job2 ();
Thread objHygThread = new Thread(new Runnable(){
public void run() { objJob1.run(); objJob2.run(); }
});
與當前的問題無關,但我希望您意識到此處第一行中的分配已死,並且完全沒有必要:
int iThreadCount = 1;
iThreadCount = GHMTreadUtil.getHygThreadCount();
可以(並且應該)只是:
int iThreadCount = GHMTreadUtil.getHygThreadCount();
看來您首先需要創建一個extends java.lang.Thread
的類,以便您可以使用帶有2個參數的構造函數。
您可能還需要在Thread子類中重寫public void run()
,以便它知道如何處理2個作業對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.