2013-07-16 28 views
20

Eğitmenim, ana iş parçacığının her iş parçacığının ana iş parçacığı olduğunu söyledi, ancak nedenini açıklayamıyor. Ben basit bir program yazarkenJava'da main() yöntemi ve ana iş parçacığı arasındaki ilişki nedir?

:

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

main() yöntem ve ana iş parçacığı arasında bir ilişki var mıdır: İcra esnasında Sonra

Class A{} 

bir istisna atar?

+3

Eğitmeniniz yanlış. Java konuları arasında ebeveyn-çocuk ilişkisi yoktur. – EJP

+0

elbette, thread main uygulamanın başlangıcıdır, JVM bir [thread (main)] (http://www.codeproject.com/Articles/616109/Java-Thread-Tutorial#maintr) oluşturur ve statik ana çağırır. tarafından sınıf –

+5

@EJP: "yanlış" serttir. İplikler bu ilişkiyi taşımadığı halde, tüm kullanıcı ipliklerinin Ana iplikten (doğrudan veya dolaylı olarak) ortaya çıktığı söylenebilir. – Thilo

cevap

37

ana() yöntemi ve Ana Konu arasında bir ilişki var mıdır?

JVM başladığında, "Ana" adında bir iş parçacığı oluşturur. Kendiniz ek parçacıklar oluşturmadıkça, programınız bu iş parçacığı üzerinde çalışır.

"Ana" iplik yapar ilk şey static void main(String[] argv) yöntemi için bakmak ve onu çağırmaktır. Bu sizin programınıza giriş noktasıdır.

Bir şeylerin "aynı anda" gerçekleşmesini istiyorsanız, birden çok iş parçacığı oluşturabilir ve her bir öğeyi yürütme işlemini gerçekleştirebilirsiniz. Daha sonra bu şeyleri aynı anda yapmaya devam edecekler. JVM ayrıca, çöp toplama gibi arka plan çalışmaları için bazı iç konuları da oluşturur.

+2

İlk şey "_Main_" iş parçacığı, statik statik ana (dize args []) 'ın aranmasıdır. Sonra nasıl olur ** statik blok ** önce çalışır. –

+9

Bu, sınıf yüklemesinin işleyiş şeklidir. Yeni bir sınıfta bir yöntemi çağırmaya çalışın ve sınıfı yükler ve başlatır (statik başlatıcı bloklarını çalıştırmak dahil). Orada "ana" hakkında özel bir şey yok. – Thilo

+0

@java_begin - ana yöntem olmadan, programı çalıştıramazsınız, böylece statik yürütme olmaz. –

9

İlk olarak Main Thread is a parent thread of every thread belirsizdir. Java iş parçacıklarında Process'dan farklı olarak ebeveyn ve çocuk kavramı yoktur. Konular gruplandırmak için ThreadGroups var ve sonra alt gruplar var, ancak ebeveyn ölürse, çocuk hala kalırsa, Process farklıdır.

main iş parçacığı, programınızı başlatan veya yalnızca public static void main(String... args) yönteminizi çalıştıran dizindir.

İlgili konular