2012-11-05 15 views
5

Es ist offensichtlich, dass OS Scheduling/Threading-Algorithmen ihre Auswirkungen auf Java-Threads haben aberSind Threads in der Java-Plattform abhängig?

können wir sicher sagen, dass Threads OS/Maschine abhängig sind?

Wenn dies der Fall ist, macht es nicht Java-Plattform abhängig?

+0

wat wenn ich Antworten mehr als eine mag?:) –

+1

Normalerweise akzeptiere ich einen und verbessere die anderen in diesem Fall. –

+1

JVM ist plattformabhängig und die Java-Programme sind plattformunabhängig. –

Antwort

7

Ja, die Details der Planung von Threads in Java ist abhängig von der JVM Implementierung und (in der Regel) auf dem O sowie Implementierung.

Aber die Besonderheiten dieser Planung ist auch nicht in der Java SE-Spezifikation angegeben, nur ein paar ausgewählte Grundregeln sind angegeben.

Das bedeutet, dass die OS-spezifische Planung auch diesen JVM-Spezifikationen entspricht, solange sie mit diesen Grundregeln konform ist.

Wenn Ihr Code von der Planung abhängt, die nicht in der JVM-Spezifikation angegeben ist, hängt es von Implementierungsdetails ab und kann nicht überall funktionieren.

Das ist ungefähr die gleiche Situation wie Datei-E/A: Wenn Sie Pfade fest codieren und ein festes Verzeichnistrennzeichen verwenden, arbeiten Sie außerhalb der Spezifikation und können nicht erwarten, dass Ihr Code plattformübergreifend funktioniert.

Edit: Die JVM Implementierung selbst (das heißt der JRE) ist plattformabhängig, natürlich. Es bietet die Schicht, die es reinen Java-Programmen erlaubt, sich nicht um die Plattform-Besonderheiten zu kümmern. Um dies zu erreichen, muss die JRE paltformspezifisch sein.

+0

hmmm @Joachim Bitte lesen Sie meine Frage noch einmal Ich fragte "können wir sicher sagen, dass Threads sind OS/Maschine abhängig? Wenn dies der Fall ist, macht es nicht Java-Plattform abhängig?" ....... Eine andere Frage tauchte gerade auf (was nicht wirklich threadbezogen ist) .. Ich lese JVM ist plattformorientiert, bedeutet es, wann auch immer in der Zukunft ein OS entwickelt/geschaffen wird, Eine neue JVM wird auch sein benötigt für das OS –

+3

@Sobia Sie sind absolut richtig. JVM muss für jede Plattform einzeln implementiert werden, da Java von Grund auf so konzipiert ist, dass Sie sich von Plattformspezifikationen fernhalten. JVM ist diese abstrahierende Ebene. –

+2

Ja, Sobia: Die Java JVM ist * nicht * plattformunabhängig. Reine Java * -Programme * können jedoch plattformunabhängig sein (solange sie nicht von einem implementierungsdefinierten Verhalten abhängen). –

3

... Java wird in der Regel native Threads verwenden, aber auf einigen Betrieb Systeme verwendet es so „grüne Themen“ genannt, die die JVM selbst behandelt und wird von einem einzigen nativen Thread ausgeführt.

Sie sollten sich darüber keine Sorgen machen. Es wird alles von der JVM, behandelt und ist für den Programmierer unsichtbar. Der einzige wirkliche Unterschied, den ich an denken kann, ist, dass bei einer Implementierung, die grüne Threads verwendet, kein Leistungsgewinn von multi-threaded-divide-and-conquer Algorithmen sein wird. Der gleiche Mangel an Leistungszuwachs ist jedoch für Implementierungen, die native Threads verwenden, aber auf einem Computer mit einem Single-Core ausgeführt.

Auszug aus JVM & Java Threads Scheduling

+0

Ich kann nur Solaris nennen, aber ich weiß nicht, ob das immer noch so ist. –

+0

@stackmonster: Keine etablierte Java SE-Plattform verwendet heutzutage grüne Threads. Vielleicht möchten Sie in die Java ME-VMs einiger Feature-Phones schauen und sie dort finden. –

+0

Überprüfen Sie diese [http://stackoverflow.com/questions/5713142/green-threads-vs-non-green-threads] Frage. –

3

Selbst wenn Sie auf der gleichen Plattform unsicheren Multithread-Code schreiben, kann das Verhalten von den vollständigen Konfigurationsdetails, dem Rest der Rechnerlast und viel Glück sowie Hardware und Betriebssystem abhängen. Ein unsicheres Programm kann scheinbar eines Tages korrekt funktionieren und das nächste auf derselben Hardware mit mehr oder weniger der gleichen Arbeitslast.

Wenn Sie sicheren Multithread-Code schreiben, der nur davon abhängt, was in der Java-Sprachspezifikation und den Bibliotheks-APIs versprochen wird, kann die Wahl der Plattform natürlich die Leistung beeinflussen, nicht jedoch, ob sie funktional funktioniert.

Verwandte Themen