2013-08-16 23 views
5

Kontrol Bu kod dışarıJava iş parçacığı kullanıcı alanı veya çekirdek alanında oluşturuldu mu?

Thread t1 = new Thread(new Runnable() { 

     @Override 
     public void run() 
     { 
      try 
      { 
       System.out.println("STARTING SERVER..."); 
       ServerSocket s = new ServerSocket(2544); 
       System.out.println("SERVER BLOCKED ON ACCEPT"); 
       Socket ss = s.accept(); 
       System.out.println("SERVER NOT BLOCKED ANYMORE"); 
      } 
      catch(Exception ex) 
      { 
       ex.printStackTrace(); 
      } 
     } 
    }); 
    t1.start(); 



    Thread t2 = new Thread(new Runnable() { 

     @Override 
     public void run() 
     { 
      try 
      { 
       while(true) 
       { 
        Thread.sleep(1000); 
        System.out.println("Hello"); 
       } 
      } 
      catch(Exception ex) 
      { 
       ex.printStackTrace(); 
      } 
     } 
    }); 
    t2.start(); 

Çıkışlar:

STARTING SERVER... 
SERVER BLOCKED ON ACCEPT 
Hello 
Hello 
Hello 
Hello 
Hello 
Hello 
Hello 
... 

Java Konuları doğru, kullanıcı uzay ipler olmalıdır? Yani engellenen bir iş parçacığı tüm süreci engellemelidir ... ne olduğu değil. Onlara ne oluyor?

+2

Engellenen bir iş parçacığı tüm süreci engelliyorsa çoklu iş parçacığının amacı nedir? –

+0

Kullanıcı alanı konuları, daha az kaynak tüketiyor çünkü bunlar, çekirdek numarası – fredcrs

+0

@fredcrs dizinin program sayacına, yığına vb. Sahip olmalarına gerek yok, ancak aslında hiç iyi çalışmıyorlar. –

cevap

11

Java konuları "kullanıcı" iş parçacığıdır, ancak kapağın altında, Java Virtual Machine çekirdek iş parçacığı kullanıyor ve çekirdek iş parçacığı havuzundaki her bir çekirdek iş parçacığı için CPU iş parçacığı işlem zamanını delege ediyor. Daha iyi bir açıklama için this question'a bakın. Bu iş parçacığının JVM satıcısına özel olduğunu ve tüm JVM uygulamaları için benim anlayışımın geçerli olmayacağı anlaşılıyor.

4

Çoğu JVM, OpenJDK tabanlı Oracle referans uygulaması dahil olmak üzere yerel, işletim sistemi düzeyinde iş parçacıkları olan konuları uygular.

'Yeşil iş parçacıkları' (iş parçacığının kullanıcı alanı simülasyonu) kullanan JVM'lerin, bir iş parçacığı içinde sonsuz bir döngü diğer iş parçacıklarını engellememesi için, özel bir uygulama bilgisi olmaksızın önleyici zamanlama kullanacağını tahmin ediyorum. sadece spekülasyon.

İlgili konular