2017-03-24 83 views
0

我需要編寫兩個程序。 1順序(完成)和1平行,我做了一些事情,但我不知道我是否已經平行或不平行,我還需要知道:我是編程的初學者,需要一些幫助和建議

  1. If(Thread.State state = Thread 。.currentThread()的getState())是顯示一個螺紋
  2. 如何分配不同的線程不同的處理器的狀態(4芯)的代碼
  3. 如何顯示處理器
  4. 計算的狀態對於每個處理器
  5. 如何生成錯誤消息(內存一致性錯誤等)

以下是我的代碼:

class Threads implements Runnable { 

    @Override 
    public void run() { 

     Thread t = Thread.currentThread(); 

     Thread.State state = Thread.currentThread().getState(); 
     String Assignment = "calculations in array"; 
     String name = "os.name"; 
     String version = "os.version"; 
     String architecture = "os.arch"; 
     String[] array = new String[1312500]; 
     int size = array.length; 

     Random r = new Random(); 
     int[] values = new int[1312500]; 
     int sumarray = 0; 
     int CountD = 0; 

     for (int i = 0; i < values.length; i++) { 
      int randomint = r.nextInt(100); 

      values[i] = randomint; 

      if ((values[i] % 2 != 0) && (values[i] >= 25 && values[i] <= 75)) { 
       sumarray += values[i]; 
       CountD++; 
      } 
     } 

     System.out.println(t.getName()); 
     System.out.println("Thread Id " + t.getId()); 
     System.out.println("Thread Priority " + t.getPriority()); 
     System.out.println("status " + state); 
     System.out.println("OS Name: " + System.getProperty(name)); 
     System.out.println("OS Version: " + System.getProperty(version)); 
     System.out.println("OS Architechture: " + System.getProperty(architecture)); 
     System.out.println(Assignment); 
     System.out.println("Size of the Array is: " + array.length); 
     System.out.println("Total number of system cores(processors): " + Runtime.getRuntime().availableProcessors()); 
     System.out.println("Difference of Array and Processors 1312500/4 = " 
       + array.length/Runtime.getRuntime().availableProcessors()); 
     System.out.println("The size of array is divisible by the number of processors"); 
     System.out.println("Summary is: " + sumarray); 
     System.out.println("The Average is: " + (sumarray/CountD)); 
    } 

} 

主要類:

class Concurrent { 

    public static void main(String[] args) { 
     Thread t1 = new Thread(new Threads()); 
     t1.start(); 

     Thread t2 = new Thread(new Threads()); 
     t2.start(); 

     Thread t3 = new Thread(new Threads()); 
     t3.start(); 

     Thread t4 = new Thread(new Threads()); 
     t4.start(); 
    } 
} 
+0

你需要谷歌上線程和Java教程,並從那裏開始。祝你好運。 – 7663233

+0

做了很多,但仍然困惑,找不到任何東西,甚至遠程與我的需求相關。 –

+0

嗨,歡迎來到Stackoverflow。請閱讀[tourguide](http://stackoverflow.com/tour),瞭解如何以正確的方式提問,以及如何使用計算器。 –

回答

3

[我需要知道如果Thread.State state = Thread.currentThread().getState();是顯示線程的狀態代碼。

聲明瞭一個名爲state變量,並在其中執行的線程的狀態初始化。 (https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html

該代碼段不顯示任何內容,但是隨後的System.out.println("status " + state);會寫狀態的表示到控制檯。

我有沒有辦法知道知道Thread.State是否與你所說的「狀態」,但調用Thread.currentThread().getState();得到任何信息,因爲任何線程的狀態永遠是RUNNABLE它呼籲getState()一段時間。

[我需要知道]如何將不同的線程分配給不同的處理器

我敢打賭你沒有。

你在問什麼叫做「處理器親和力」。大多數程序依靠操作系統自動調度可用CPU上的可運行線程。這只是非常複雜的程序(注意,「複雜」並不總是等於「好」),需要修補它。

沒有標準設置Java線程的CPU關聯性的方法,但可能有一些方法可用於您的特定操作系統。你可以谷歌「Java處理器親和力」獲取更多信息。

[我需要知道]如何顯示處理器

你將不得不解釋什麼是「狀態」的意思,也,其處理器,而當狀態?

根據「狀態」的含義,如果您編寫代碼來詢問代碼運行的同一處理器的「狀態」,那麼答案可能永遠不會改變。就像Thread.currentThread().getState()的結果永不改變一樣。

處理器「狀態」是大數據中心的系統管理員喜歡在圖表上繪製的東西,但它們很少在之內有用,除非您再次執行一些非常複雜的操作。

[我需要知道]如何生成錯誤消息。

要做到這一點,最簡單的方法是使用System.out.println(...)System.err.println(...)

也許你真正的意思別的東西問,怎麼樣知道報告錯誤,或如何處理異常。

大多數Java庫例程在出現問題時會拋出異常。在這種情況下你所要做的就是完全忽略它。如果您沒有編寫任何代碼來處理異常,那麼您的程序將自動打印錯誤消息,並在拋出異常時停止。

+1

「我敢打賭,你不會」從我這裏得到讚揚。這裏有大量的耐心和剋制。 – Gray

+0

@詹姆斯大我仍然沒有得到任何東西,但該處理器親和力是一個百萬富翁的答案是尋找十天,但無法獲得這個期限,但仍請你能告訴我,我做了一個平行過程與否(是或否) –

+0

@MoizFarooqui,您的程序啓動四個線程。這四個線程中的每一個都運行相同的'Threads'類的實例;並且由於類構造函數不接受任何參數,所以四個線程中的每一個都將完成與其他線程完全相同的任務。是的,他們會同時運行,但我懷疑他們可能沒有按照你的意圖去做。通常,不同的線程要麼做不同的事情,要麼針對不同的數據做同樣的事情。你的線程對相同的數據都做同樣的事情。 –

0

如何不同的線程分配給不同的處理器(4個核)

讓我們離開這個決定Java運行時。從程序員的角度來看,嘗試使用可用的功能。

對於CPU內核的有效utilizaiton,看看這個問題:

Java: How to scale threads according to cpu cores?

關於處理器的親和力,你可以查看帖子:

Java thread affinity

http://tools.assembla.com/Behemoth/browser/Tests/JAVA/test/src/main/java/test/threads/ThreadAffinity.java(由BegemoT寫)

但是你應該避免這些類型的東西並專注於業務邏輯。

如何產生的誤差內留言(內存一致性錯誤等)

您可以輕鬆地生成內存一致性錯誤。

不要使用像​​或Lock這樣的線程安全結構來保護您的代碼,並允許多個線程更新您班級的數據。

看一看這個文件page

參考documentation鏈接爲更好地瞭解多線程的概念。