2011-12-28 37 views
6

Liên kết này dường như gợi ý rằng "nó chỉ hoạt động": (khá xa phía dưới dưới 7.3 Đính kèm Chủ đề Bản địa) http://java.sun.com/docs/books/jni/html/invoke.htmlĐiều gì sẽ xảy ra nếu tôi gọi một hàm java từ nhiều luồng từ C với JNI?

Tôi không thấy làm thế nào có thể, là JVM nhúng sẽ bắt đầu riêng của mình chủ đề tự động? Hoặc xếp hàng các cuộc gọi JNI? Làm thế nào khác có thể có nhiều cuộc gọi đến cùng một máy ảo. mà tôi đã không hướng dẫn để làm bất kỳ luồng?

Bất kỳ cách nào tôi có thể tưởng tượng rằng để làm việc là, nếu mã java đơn giản sẽ được thực thi trong cùng một chuỗi gọi là mã c. Đúng không? Điều đó có nghĩa là tôi không phải làm bất kỳ luồng nào trong Java.

+0

Đối với bài viết bạn đã liên kết, bạn không phải thực hiện bất kỳ luồng nào trong Java. Một câu hỏi khác là nếu JVM tạo ra một chuỗi riêng biệt của riêng mình hoặc chỉ sử dụng chuỗi ban đầu (tôi đang đặt cược vào chuỗi thứ hai). – SJuan76

Trả lời

4

Jvm không phải tạo chủ đề riêng của nó, các cuộc gọi phương thức được thực thi trên các chuỗi gốc tạo ra chúng. AttachCurrentThread và DetachCurrentThread sẽ quản lý bất kỳ quản lý trạng thái nội bộ jvm cần thiết nào, ví dụ tạo các đối tượng java Thread bao quanh các luồng gốc.

+0

Có, tôi chỉ tìm thấy điều này trên Wikipedia: 'Khi được đính kèm, một chuỗi gốc hoạt động giống như một chuỗi Java thông thường đang chạy trong một phương thức gốc. Chuỗi gốc vẫn được gắn vào VM cho đến khi nó gọi DetachCurrentThread() để tách chính nó.' – Blub

0

JVM bắt đầu chủ đề của riêng nó mà nó cần chạy. Bạn kích hoạt tạo chủ đề này bằng cách khởi động JVM.

Các vấn đề liên quan