2011-12-28 2 views
6

Questo link sembra suggerire che "funziona": (abbastanza lontano sul fondo sotto 7.3 Collegamento nativi discussioni) http://java.sun.com/docs/books/jni/html/invoke.htmlCosa succede se chiamo una funzione java da più thread da C con JNI?

Non vedo come ciò sia possibile, è la JVM incorporato intenzione di iniziare la propria fili automaticamente? O fare la coda alle chiamate JNI? In quale altro modo potrebbero esserci più chiamate alla stessa macchina virtuale. quale non ho incaricato di fare alcun threading?

Qualsiasi modo posso immaginare che funzioni è, se il codice java verrà semplicemente eseguito nello stesso thread chiamante del codice c. È corretto? Ciò significherebbe che non devo fare alcun threading in Java.

+0

Per quanto riguarda l'articolo collegato, non è necessario eseguire alcun threading in Java. Un'altra domanda è se la JVM crea il proprio thread separato o semplicemente usa il thread originale (sto scommettendo su quest'ultimo, però). – SJuan76

risposta

4

jvm non deve creare i propri thread, le chiamate al metodo vengono eseguite sui thread nativi che li creano. AttachCurrentThread e DetachCurrentThread si prenderanno cura di qualsiasi gestione dello stato interna di jvm necessaria, ad esempio creando oggetti Thread java che avvolgono i thread nativi.

+0

Sì, ho appena trovato questo su Wikipedia: 'Una volta collegato, un thread nativo funziona come un normale thread Java eseguito all'interno di un metodo nativo. Il thread nativo rimane collegato al VM fino a quando non chiama DetachCurrentThread() per staccarsi da solo – Blub

0

JVM avvia i propri thread che è necessario eseguire. Attiva questa creazione di thread avviando la JVM.