"Merhaba Amigo! Ellie sana ileti dizilerinden bahsetti ve ben de sana onlarla nasıl çalıştığını anlatacağım. Yeni bir ileti dizisi oluşturmak için yapman gerekenler:"

1)  Bir Thread nesnesi oluşturun

2) Çalıştırmak istediğiniz yöntemi iletin

3)  Oluşturulan Thread nesnesinde start yöntemini çağırın.

Bu örneği göz önünde bulundurun:

kod Tanım
class Printer implements Runnable
{
public void run()
{
System.out.println("I’m printer");
}
}
Runnable arabirimini uygulayan sınıf .
public static void main(String[] args)
{
Printer printer = new Printer();
Thread childThread = new Thread(printer);
childThread.start();
}
1 Çalıştırma yöntemini uygulayan Yazıcı sınıfının bir örneğini oluşturun.
2 Yeni bir Thread nesnesi oluşturun. Kurucuya, run() yönteminin çağrılması gereken yazıcı nesnesini iletiyoruz. 3 start()
yöntemini çağırarak yeni diziyi başlatın .

Küçük Java programları genellikle «ana iş parçacığı» adı verilen bir iş parçacığından oluşur. Ancak programlar daha çok "alt diziler" adı verilen ek diziler başlatır. Ana iş parçacığı, ana yöntemi çalıştırır ve biter. Runnable'ın çalıştırma yöntemi , alt parçacıkları için benzer bir yöntemdir.

"Ah, çok sayıda iş parçacığı, çok sayıda ana yöntem anlamına gelir."

Yeni konu oluşturma ve başlatma - 1

Bir Thread nesnesine hangi özel yöntemi başlatması gerektiğini söylemek için ona bir yöntem geçirmemiz gerekir. Java'da bu, Runnable arayüzü kullanılarak yapılır . Bu arabirim tek bir soyut yöntem içerir: void run() . Thread sınıfının bir Thread(Runnable Runnable) yapıcısı vardır. Runnable arayüzünü uygulayan herhangi bir nesneyi iletebilirsiniz .

Sınıfınız Runnable'ı devralmalı ve çalıştırma yöntemini geçersiz kılmalıdır. Bu yöntemi çağırmak, yeni iş parçacığını başlatan şeydir. Run metodunda istediğinizi yazabilirsiniz .

kod Tanım
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Runnable arabirimini uygulayan sınıf.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

Printer printer2 = new Printer("Jack");
Thread thread2 = new Thread(printer2);
thread2.start();
}
Her biri kendi Yazıcı nesnesine dayalı olacak iki iş parçacığı oluşturun.
public static void main(String[] args)
{
Printer printer = new Printer("Natasha");

Thread thread1 = new Thread(printer);
thread1.start();

Thread thread2 = new Thread(printer);
thread2.start();

Thread thread3 = new Thread(printer);
thread3.start();
}
Tek bir Yazıcı nesnesine dayalı olarak üç iş parçacığı oluşturun.

Dahası, tüm bunları tek bir sınıfta birleştirebilirsiniz. Thread sınıfı, Runnable arabirimini devralır , bu nedenle yalnızca çalıştırma yöntemini geçersiz kılmanız gerekir :

Yeni bir iş parçacığı oluşturmanın başka bir yolu
class Printer extends Thread
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Runnable arabirimini uygulayan Thread sınıfını devralın ve ardından run yöntemini geçersiz kılın.
public static void main(String[] args)
{
Printer printer = new Printer("Jack");
printer.start();

Printer printer2 = new Printer("Jack");
printer2.start();

}
Her biri kendi Yazıcı nesnesine dayalı olacak iki iş parçacığı oluşturun.

"Bu daha şık bir çözüm."

"Evet, ama eksiklikleri var:"

1)  Natasha örneğinde olduğu gibi, tek bir nesneye dayalı olarak birkaç dizi başlatmanız gerekebilir.

2)  Thread sınıfından miras alırsanız, sınıfınıza başka bir üst sınıf ekleyemezsiniz.

3)  Sınıfınızın bir ebeveyn sınıfı varsa, Thread'i ikinci bir ebeveyn sınıfı olarak ekleyemezsiniz.

"Başka bir deyişle, start yöntemi çağrıldıktan sonra, iş parçacıklarının her biri yapıcıya iletilen nesnenin çalıştırma yöntemini yürütmeye başlar mı?"

"Evet. Kurucuya hiçbir şey iletilmezse, Thread yalnızca dahili çalıştırma yöntemini yürütür."

"Ama neden yöntemi böyle çağırmıyoruz?"

kod
public static void main(String[] args)
{
 Printer printer1 = new Printer("Nick");
 printer1.run();
}

"Ana parçacığı çalıştırma yöntemine ulaştığında, "küçük robotu" basitçe içeri girer ve içindeki tüm komutları yürütür . Ancak bunlar yürütüldükten sonra ana yönteme geri döner ve diğer komutları yürütmeye devam eder. küçük robot" yaratılacak. Tüm işler paralel (aynı anda) değil, sırayla gerçekleştirilecek."

"Anlıyorum. Run dışında başka bir yöntem çağırabilir misin?"

"Hayır. Hepsi, yalnızca yöntemlerinden biri hakkında "bilen" Runnable arabirimine bağlı: run() ."