2017-03-24 6 views
0

Ich muss zwei Programme schreiben. 1 sequenzielle (Fertig) und 1 parallel und ich habe etwas getan, aber ich weiß nicht, ob ich gemacht habe es parallel oder nicht, und ich muß auch wissen:Ich bin ein sehr Anfänger bei der Programmierung und brauche etwas Hilfe und Beratung

  1. Wenn (Thread.State Zustand = Thread . .currentThread() getState();) ist der Code, der den Status eines Threads anzuzeigen
  2. wie unterschiedliche Threads verschiedene Prozessoren zuzuweisen (4 Kerne)
  3. , wie der Status des Prozessors anzuzeigen
  4. Berechnungs für jeden Prozessor
  5. wie Fehlermeldungen (Memory Consistency Errors, etc.) zu generieren

Folgende ist mein Code:

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)); 
    } 

} 

Hauptklasse:

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

Sie müssen ein Tutorial über Threads und Java google und beginnen Sie dort. Viel Glück. – 7663233

+0

haben viel davon, aber immer noch verwirrt und kann nichts finden, auch nur im entferntesten zu meinen Bedürfnissen verwandt. –

+0

Hallo und Willkommen zu Stackoverflow. Lesen Sie den [tourguide] (http://stackoverflow.com/tour), um zu erfahren, wie Sie Fragen richtig stellen und wie stackoverflow funktioniert. –

Antwort

3

[Ich muss wissen] Wenn Thread.State state = Thread.currentThread().getState(); der Code den Status eines Threads angezeigt werden soll.

, die eine variable state und initialisiert ihn mit dem Zustand des Fadens, in dem benannten erklärt sie ausgeführt wird. (https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html

Dieser Code-Schnipsel zeigt nicht alles, aber die nachfolgenden System.out.println("status " + state); eine Darstellung des Zustandes, um die Konsole schreiben.

Ich habe keine Möglichkeit zu wissen, ob Thread.State entspricht das, was man als " Status“, aber Thread.currentThread().getState(); liefert keine Information, da der Zustand von jedem Thread ruft immer RUNNABLE sein wird, während es getState() Aufruf.

[ich wissen muss], wie verschiedene Threads zu verschiedenen Prozessoren

012 zuweisen

Ich wette, Sie nicht.

Worum Sie bitten, wird "Prozessoraffinität" genannt. Die meisten Programme verlassen sich auf das Betriebssystem, um runnable Threads auf verfügbaren CPUs automatisch zu planen. Es sind nur sehr ausgeklügelte Programme (und beachten Sie, dass "ausgefeilte" nicht immer gleich "gut" sind), die daran basteln müssen.

Es gibt keine Standard Möglichkeit, die CPU-Affinität von Java-Threads festzulegen, aber es gibt möglicherweise einige Mittel, die Sie auf Ihrem bestimmten Betriebssystem verwenden können. Sie können google "Java Prozessor Affinität" für weitere Informationen.

[Ich muss wissen] Wie man den Status des Prozessors erklären müssen

Sie werden angezeigt, was „Status“ bedeutet und auch, welcher Prozessor und wann?

Je nachdem, was "Status" bedeutet, Wenn Sie Code schreiben, um nach dem "Status" desselben Prozessors zu fragen, auf dem der Code ausgeführt wird, wird sich die Antwort vermutlich nie ändern. Genauso wie sich das Ergebnis von Thread.currentThread().getState() nie ändert.

Prozessor "Status" ist die Art von Sache, die Sysadmins von großen Rechenzentren gerne in Diagrammen gezeichnet sehen, aber sie sind selten innerhalb ein Programm, es sei denn, Sie tun wieder etwas sehr raffiniert.

[Ich muss wissen], wie man Fehlermeldungen erstellt.

Der einfachste Weg, das zu tun ist System.out.println(...) oder System.err.println(...)

Vielleicht meint man wirklich nutzen, um etwas anderes zu fragen, wie, wie zu wissen, wann einen Fehler zu melden, oder wie Ausnahmen zu behandeln.

Die meisten Java-Bibliotheksroutinen lösen eine Ausnahme aus, wenn etwas schief geht. Alles, was Sie in diesem Fall tun müssen, ist es vollständig zu ignorieren. Wenn Sie keinen Code schreiben, um die Ausnahme zu behandeln, wird Ihr Programm automatisch eine Fehlermeldung ausgeben und stoppen, wenn die Ausnahme ausgelöst wird.

+1

"Ich wette, du tust nicht" bekommt eine positive Bewertung von mir. Große Menge an Geduld und Zurückhaltung hier. – Gray

+0

@james groß Ich habe immer noch nichts bekommen, aber Prozessoren Affinity war eine Millionär Antwort war auf der Suche nach zehn Tagen, aber war nicht in der Lage zu bekommen, aber immer noch bitte können Sie mir sagen, habe ich einen parallelen Prozess oder nicht (ja oder nein) –

+0

@MoizFarooqui, Ihr Programm startet vier Threads. Jeder dieser vier Threads führt eine Instanz der gleichen 'Threads' Klasse; und da der Klassenkonstruktor keine Argumente annimmt, wird jeder der vier Threads genau dasselbe tun wie die anderen. Ja, sie laufen gleichzeitig, aber ich vermute, dass sie möglicherweise nicht das tun, was Sie beabsichtigt haben. Gewöhnlich machen verschiedene Threads unterschiedliche Dinge oder sie machen dasselbe mit verschiedenen Daten. Ihre Threads machen alle dasselbe mit den gleichen Daten. –

0

wie verschiedene Threads zu verschiedenen Prozessoren (4 Kerne)

Lassen wir diese Entscheidung zu Java Runtime zuzuweisen. Versuchen Sie aus Sicht des Programmierers, die für Sie verfügbaren Funktionen zu verwenden.

Für eine effektive utilizaiton der CPU-Kerne haben einen Blick auf diese Frage:

Java: How to scale threads according to cpu cores?

In Bezug auf Prozessor-Affinität können Sie überprüfen, Beiträge:

Java thread affinity

http://tools.assembla.com/Behemoth/browser/Tests/JAVA/test/src/main/java/test/threads/ThreadAffinity.java (geschrieben von Begemot)

Aber Sie sollten diese Art von Sache vermeiden s und konzentrieren sich auf Geschäftslogik.

wie Fehler messeges (Speicherkonsistenzfehler usw.)

Schnell Speicherkonsistenzfehler erzeugen kann, erzeugen.

Schützen Sie Ihren Code nicht mit threadsicheren Konstrukten wie synchronized oder Lock und erlauben Sie mehreren Threads, Daten aus Ihrer Klasse zu aktualisieren.

Werfen Sie einen Blick auf diese Dokumentation page

für ein besseres Verständnis von Multi-Threading Konzepte documentation Links verweisen.

Verwandte Themen