簡體   English   中英

Java中的線程

[英]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對象中的另一個可運行對象中管理這兩個可運行對象。

參見Thread(Runnable r)

我還將參考您對上一個問題和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM