2011-12-28 9 views
6

Ten link wydaje się sugerować, że „po prostu działa”: (dość daleko na dole pod 7.3 Zakładanie wątków rodzimych) http://java.sun.com/docs/books/jni/html/invoke.htmlCo się stanie, jeśli wywołasz funkcję Java z wielu wątków z C z JNI?

ja nie wiem, jak to jest możliwe, jest osadzony JVM zamiar rozpocząć własną wątki automatycznie? Lub w kolejce połączeń JNI? Jak inaczej może być wiele połączeń do tej samej maszyny wirtualnej. czego nie pouczałem, żeby robić nic?

W każdym razie mogę sobie wyobrazić, że do pracy jest, jeśli kod Java zostanie po prostu wykonany w tym samym wątku wywołania co kod c. Czy to jest poprawne? Oznaczałoby to, że nie muszę wykonywać żadnych wątków w Javie.

+0

Jeśli chodzi o artykuł, który łączysz, nie musisz wykonywać żadnych wątków w Javie. Kolejne pytanie brzmi, czy JVM tworzy własny, oddzielny wątek, czy też po prostu używa oryginalnego wątku (ja stawiam na to drugie). – SJuan76

Odpowiedz

4

Jvm nie musi tworzyć własnych wątków, wywołania metod są wykonywane na natywnych wątkach, które je tworzą. AttachCurrentThread i DetachCurrentThread zajmą się koniecznym zarządzaniem wewnętrznym jvm, na przykład tworzeniem obiektów wątku java owijających nić rodzime.

+0

Tak, właśnie znalazłem to na Wikipedii: 'Po dołączeniu natywny wątek działa jak zwykły wątek Java działający w natywnej metodzie. Natywny wątek pozostaje podłączony do maszyny wirtualnej, dopóki nie wywoła funkcji DetachCurrentThread(), aby się odłączyć. " – Blub

0

JVM uruchamia własne wątki, które musi uruchomić. Wywołujesz tworzenie tego wątku, uruchamiając maszynę JVM.

Powiązane problemy