Java'da Thread Sınıfı ile Çalıştırılabilir Arayüz arasındaki fark

Yazar: Laura McKinney
Yaratılış Tarihi: 1 Nisan 2021
Güncelleme Tarihi: 14 Mayıs Ayı 2024
Anonim
Java'da Thread Sınıfı ile Çalıştırılabilir Arayüz arasındaki fark - Teknoloji
Java'da Thread Sınıfı ile Çalıştırılabilir Arayüz arasındaki fark - Teknoloji

İçerik


Bir iplik iki şekilde tanımlanabilir. İlk olarak Thread sınıfını genişletmek Bu zaten bir Runnable arayüzü kurmuştur. İkincisi, doğrudan Runnable bir arayüz uygulamak. Thread sınıfını genişleterek bir thread tanımladığınızda, Thread sınıfındaki run () metodunu geçersiz kılmanız gerekir. Bir Çalıştırılabilir arayüz uygulayan bir iş parçacığı tanımladığınızda, Çalıştırılabilir arabirimin tek çalıştırma () yöntemini uygulamanız gerekir. Thread ve Runnable arasındaki temel fark, Thread sınıfını genişleterek tanımlanan her threadın benzersiz bir nesne yaratması ve bu nesne ile ilişkilendirilmesidir. Öte yandan, Runnable arabirimi uygulanarak tanımlanan her iş parçacığı aynı nesneyi paylaşır.

Aşağıda gösterilen karşılaştırma tablosunun yardımıyla Thread ile Runnable arasındaki diğer bazı farklılıkları da gözlemleyelim:

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. Sonuç

Karşılaştırma Tablosu

Karşılaştırma için temeliplikRunnable
TemelHer iş parçacığı benzersiz bir nesne oluşturur ve onunla ilişkilendirilir.Birden çok iş parçacığı aynı nesneleri paylaşır.
Bellek Her iş parçacığı benzersiz bir nesne oluştururken, daha fazla bellek gerekir.Birden çok iş parçacığı aynı nesneyi paylaştığı için daha az bellek kullanılır.
uzatmaJava'da, çoklu mirasa izin verilmez, dolayısıyla bir sınıf Thread sınıfını genişlettikten sonra, başka bir sınıfı genişletemez.Runnable arabirimini uygulayan bir iş parçacığı tanımlanırsa, bir sınıfı uzatma şansı vardır.
kullanım Bir kullanıcı, thread sınıfını yalnızca Thread sınıfındaki diğer yöntemleri geçersiz kılmak istiyorsa genişletmelidir.Yalnızca run yöntemini uzmanlaştırmak istiyorsanız, Runnable'ı uygulamak daha iyi bir seçenektir.
Kavrama İş parçacığı sınıfının genişletilmesi, sınıf iş parçacığı sınıfının kodunu ve aynı zamanda iş parçacığına atanan işi içerdiğinden sıkı birleşim sağlarRunnable arayüzünün uygulanması, Thread kodu, Threads işinden ayrı olduğu için gevşek birleşme sağlar.


İplik Sınıfının Tanımı

iplik bir sınıftır java.lang paketlemek. Thread sınıfı bir Nesne sınıf ve uygular Runnable arabirimleri. Thread sınıfı, iş parçacığı üzerinde oluşturmak ve çalıştırmak için yapıcılara ve yöntemlere sahiptir. Birden fazla iş parçacığı oluşturduğumuzda, her iş parçacığı benzersiz bir nesne oluşturur ve bu nesneyle ilişkilendirilir. Thread sınıfını genişleten bir thread oluşturursanız, java çoklu kalıtımın desteklememesi nedeniyle başka bir sınıfı da genişletemezsiniz. Bu yüzden, Thread sınıfını sadece, aynı zamanda Thread sınıfının diğer bazı metodlarını geçersiz kılmak istediğinizde de genişletmeyi seçmelisiniz. Bir Thread sınıfını genişleten bir thread yaratmanın bir örneğini görelim.

/ * Bir iş parçacığı tanımlamak * / Class Mythread, iş parçacığının {/ * işini uzatıyor * / public void run () {için (int i = 0; i <10; i ++) {System.Out.ln ("Çocuk İşareti") ); }} Sınıf mainThread {/ * ana iş parçacığının işi * / public static void main (String args) {Mythread mt = new Mythread (); / * ana iş parçacığı alt iş parçacığını oluşturdu * / mt.start (); (int i = 0; i <10; i ++) {System.Out. ("Main Thread"); }}} / * Çıktı * / Ana Konu Ana Konu Ana Konu Ana Konu Çocuk Konu Alt Konu Çocuk Konu Alt Konu Çocuk Konu Alt Konu Ana Konu Alt Konu Ana Konu Ana Konu Alt Konu Çocuk Konu Alt Konu

Yukarıdaki kodda, Thread sınıfını genişleten ve Thread sınıfının bir çalışma yöntemini geçersiz kılan bir Mythread sınıfı oluşturdum. Ana yöntemi içeren sınıfta, Mythread sınıfından bir iplik nesnesi (mt) oluşturdum ve thread nesnesini kullanarak start () yöntemini çağırdım. Start yöntemi ipliğin yürütülmesini başlatır ve aynı zamanda JVM ipliğin run metodunu çağırır. Şimdi programda bir ana konu ve ana konu tarafından oluşturulan ikinci alt konu olmak üzere iki konu var. Her iki dişlinin yürütülmesi eşzamanlı olarak gerçekleşir, ancak kesin çıktı hükmedilemez.


Çalıştırılabilir Arabirimin Tanımı

Runnable bir arayüzdür java.lang paketlemek. Runnable arayüzünü uygulayarak bir iplik tanımlayabiliriz. Çalıştırılabilir arabirimin tek bir yöntemi var koşmak(), Runnable arabirimini uygulayan sınıf tarafından uygulanır. Bir Çalıştırılabilir arabirim uygulayan iş parçacığı tanımlamayı seçtiğinizde, diğer sınıfları genişletme seçeneğiniz de vardır. Runnable arabirimini uygulayarak birden çok iş parçacığı oluşturduğunuzda, her iş parçacığı aynı çalıştırılabilir örneği paylaşır. Runnable arabirimini kullanarak bir iş parçacığının nasıl tanımlanacağını öğrenelim.

/ * Bir iş parçacığı tanımlamak * / Class Runnablethread, * / public void run () {için (<i; = 0; i <10; i ++) {/ "; ); }} Sınıf mainThread {/ * ana iş parçacığının işi * / public static void main (String args) {Mythread rt = new Mythread (); / * ana konu çalıştırılabilir nesneyi yarattı * / Thread t = new Thread (rt); / * ana iş parçacığı alt iş parçacığı oluşturur ve çalıştırılabilir nesneyi geçti * / t.start (); (int i = 0; i <10; i ++) {System.Out. ("Main Thread"); }}} / * Çıktı * / Ana Konu Ana Konu Ana Konu Ana Konu Çocuk Konu Alt Konu Çocuk Konu Alt Konu Çocuk Konu Alt Konu Ana Konu Alt Konu Ana Konu Ana Konu Alt Konu Çocuk Konu Alt Konu

Yukarıdaki kodda, Runnable arabirimini uygulayan ve Runnable arabiriminin run () yöntemini uygulayarak iş parçacığının işini tanımlayan bir Runnablethread sınıfı oluşturdum. Sonra ana metodu içeren bir sınıf mainthread yaratıyorum. Ana yöntemin içinde Runnablethread sınıfının çalıştırılabilir bir nesnesini ilan ettim ve bu nesneyi bir iş parçacığı bildirirken Thread’ın yapıcısına ilettim. Bu şekilde, thread nesnesini (t) bir çalıştırılabilir nesne (rt) ile bağladım. Daha sonra thread nesnesini, Runnablethread sınıfının run yöntemini çağıran thread dizisinin start yöntemini çağırır. Runnable nesnesini Thread nesnesine bağlamazsam, thread başlaması yöntemi, Thread sınıfının çalışma yöntemini çağırırdı. Şimdi, yine kodda iki iş parçacığı var, ana iş parçacığı ve ana iş parçacığı, her ikisi de aynı anda yürütülebilen alt iş parçacığı oluşturuyor, ancak kesin çıktı asla önlenemez.

Java'da Thread ile Runnable Arasındaki Temel Farklılıklar

  1. Thread sınıfını genişleterek oluşturulan her thread, bunun için benzersiz bir nesne yaratır ve bu nesne ile ilişkilendirilir. Öte yandan, bir Runnable arabirimi uygulanarak oluşturulan her iş parçacığı aynı çalıştırılabilir örneği paylaşır.
  2. Thread sınıfı genişletilerek yaratıldığında her bir konu benzersiz bir nesne ile ilişkilendirildiğinden, daha fazla bellek gerekir. Öte yandan, Runnable arabirimi uygulanarak oluşturulan her iş parçacığı aynı nesne alanını paylaşır, bu nedenle daha az bellek gerektirir.
  3. Thread sınıfını daha sonra genişletirseniz, Java'nın çoklu kalıtıma izin vermediğinden başka bir sınıfı miras alabilirsiniz, ancak Runnable'ı uygulamak hala bir sınıfın başka bir sınıfa miras alma şansını sağlar.
  4. Bir Thread sınıfını sadece, Thread sınıfının diğer bazı metotlarını geçersiz kılmak veya uzmanlaştırmak zorunda kalırsa genişletmelidir. Yalnızca çalıştırma yöntemini özelleştirmek istiyorsanız, Çalıştırılabilir bir arabirim uygulamanız gerekir.
  5. Thread sınıfının genişletilmesi, Thread kodunun sıkı bir şekilde bağlanmasını sağlar ve Thread sınıfı ile aynı iş parçacığının işi bulunur. Öte yandan, Runnable Runnable arayüzü, Thread kodu, thread'a atanan işten ayrı olduğu için kodda gevşek bağlantı sağlar.

Sonuç:

Thread sınıfını genişletmek yerine bir Çalıştırılabilir arayüz oluşturmak tercih edilir. Runnable uygulamak, iş parçacığı işine atanan sınıftan farklı olduğundan, kodunuzu gevşek bir şekilde birleştirir. Daha az bellek gerektirir ve aynı zamanda bir sınıfın diğer tüm sınıfları miras almasına izin verir.