2013-07-16 28 views
20

Gia sư của tôi nói với tôi rằng chủ đề chính là chủ đề gốc của mỗi luồng, nhưng anh ta không thể giải thích tại sao.Quan hệ giữa phương thức main() và chủ đề chính trong Java là gì?

Khi tôi viết một chương trình đơn giản:

Class A{} 

Sau đó, nó tại thời điểm thực hiện nó ném một ngoại lệ:

java.lang.NoSuchMethodError: main Exception in thread "main" 

Có bất kỳ mối quan hệ giữa main() phương pháp và các chủ đề chính?

+3

Gia sư của bạn sai. Không có mối quan hệ cha-con giữa các chủ đề Java. – EJP

+0

tất nhiên, chủ đề chính là sự khởi đầu của ứng dụng, JVM tạo ra một [thread (main)] (http://www.codeproject.com/Articles/616109/Java-Thread-Tutorial#maintr) và gọi tĩnh chính class by it –

+5

@EJP: "sai" là khắc nghiệt. Trong khi các chủ đề không mang mối quan hệ đó, có thể nói rằng tất cả các luồng người dùng được sinh ra (trực tiếp hoặc gián tiếp) từ luồng chính. – Thilo

Trả lời

37

Có mối quan hệ nào giữa phương thức main() và Main Thread không?

Khi JVM bắt đầu, nó tạo ra một chuỗi có tên là "Chính". Chương trình của bạn sẽ chạy trên chủ đề này, trừ khi bạn tự tạo các chủ đề bổ sung.

Điều đầu tiên mà chuỗi "Main" thực hiện là tìm phương thức static void main(String[] argv) của bạn và gọi nó. Đó là điểm vào chương trình của bạn.

Nếu bạn muốn mọi thứ xảy ra "cùng một lúc", bạn có thể tạo nhiều chuỗi và cung cấp cho mỗi thứ để thực thi. Sau đó, họ sẽ tiếp tục làm những việc này đồng thời. JVM cũng tạo ra một số luồng nội bộ cho công việc nền như thu gom rác.

+2

Nếu điều đầu tiên "_Main_" Chủ đề làm là tìm kiếm 'static void main (String args [])' Sau đó, làm thế nào đến ** static block ** chạy đầu tiên. –

+9

Đó là cách hoạt động của lớp tải. Cố gắng gọi một phương thức trên một lớp mới, và nó sẽ nạp lớp và khởi tạo nó (bao gồm cả việc chạy các khối khởi tạo tĩnh). Không có gì đặc biệt về "chính" ở đó. – Thilo

+0

@java_begin - không có phương pháp chính, bạn không thể chạy chương trình, vì vậy không thực thi tĩnh. –

9

Trước tiên, Main Thread is a parent thread of every thread không rõ ràng. Không giống như Process, trong các chủ đề Java không có khái niệm về cha mẹ và con. Bạn có ThreadGroups để nhóm Chủ đề và sau đó có các nhóm con, nhưng nó khác với Process theo nghĩa là nếu cha mẹ chết, đứa trẻ vẫn còn.

Chủ đề main là chuỗi bắt đầu chương trình của bạn hoặc chỉ đơn giản là chạy phương thức public static void main(String... args) của bạn.

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