multithreading java tutorial with examples
Bu Öğretici Java'da Çoklu Okuma, Eş Zamanlılık Uygulaması, bir iş parçacığının yaşam döngüsü, İş Parçacığı Sınıfı Örneği, Runnable Arayüzü kullanan İş Parçacığı hakkında her şeyi açıklar:
Bilgisayar dünyasındaki eşzamanlılık, bir sistemin (uygulama, bilgisayar veya programlama dili) bir programın veya uygulamanın birkaç örneğini paralel olarak yürütme yeteneğidir.
Eşzamanlı olarak örnekleri veya programları çalıştırarak, işletim sistemi donanımı vb. Gibi kullanılmayan kaynakları kullanabildiğimiz için yüksek verim ve daha yüksek performans sağlıyoruz. Örneğin, bir sistemde birden fazla CPU varsa, uygulama bu CPU'ları etkin bir şekilde kullanabilir ve verimi artırabilir.
=> Özel Java Eğitimi Eğitim Dizisi İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
- Java'da Multithreading Nedir
- Java'da Konu Nedir
- Sonuç
Java'da Multithreading Nedir
Java'da iş parçacıkları, eşzamanlılığın omurgası olarak görülebilir. Bir iş parçacığı, paylaşılan kaynakların yanı sıra kendi çağrı yığınına erişen yürütülebilir, hafif bir birimdir.
Java uygulaması bir süreçtir ve bu uygulama içinde eşzamanlılığı sağlamak için birden fazla iş parçacığına sahip olabiliriz.
Sistemde çalışan bir uygulamanın birden fazla örneğe sahip olabileceğini biliyoruz ve bunlara genellikle çoklu doküman uygulamaları denir. Bu uygulama örneklerine işlem adı verilir. Bu işlemlerin her birine iş parçacığı olarak bilinen bir yürütme birimi atanır.
İşletim sistemi ve uygulama gereksinimlerine bağlı olarak, sürece tek bir iş parçacığı veya birden çok iş parçacığı atanabilir. Uygulama sürecine birden fazla iş parçacığı atandığında, bu birden çok iş parçacığını aynı anda yürütmemiz gerekir.
' Birden çok iş parçacığını aynı anda veya eşzamanlı olarak yürütme veya çalıştırmanın bu tekniği, çok iş parçacıklı olarak bilinir . '
Multithreading basitçe, aynı uygulama içinde çalışan birden fazla iş parçacığımız olduğu anlamına gelir.
Java programlama dili, çoklu okuma için yerleşik desteğe sahiptir.
Çoklu iş parçacığı yukarıdaki diyagramda gösterilmektedir. Gösterildiği gibi, bir uygulama içinde aynı anda çalışan birden çok iş parçacığı vardır.
Örneğin, düzenleme, yazdırma vb. gibi işlevler sağlayan bir masaüstü uygulaması, çok iş parçacıklı bir uygulamadır. Bu uygulamada, yazdırma bir arka plan işlemi olduğundan, bu işlevleri iki farklı iş parçacığına atayarak aynı anda belge düzenleme ve belge yazdırma işlemi gerçekleştirebiliriz.
Çok iş parçacıklı uygulamalardaki iş parçacıkları, eşzamanlı olarak birbirine paralel olarak çalışır. Bu nedenle, çoklu okuma aynı zamanda Java'da eşzamanlılığın bir parçasıdır. Birden çok iş parçacığı olmasına rağmen, bellek alanını paylaşarak bellekten tasarruf ettiklerini unutmayın. Ayrıca, iş parçacıkları bağlamları anında kolayca değiştirebilir.
Multithreading, bir uygulamanın iki veya daha fazla bölümünün eşzamanlı olarak yürütülmesini sağladığı için esas olarak kullanışlıdır. Bu, uygulamanın CPU süresini maksimumda kullanmasını sağlar ve boşta kalma süresi minimumda tutulur.
Aşağıda, sıklıkla kullanıldıkları için çok iş parçacıklı ortamla ilgili bilmemiz gereken terimlerden bazıları verilmiştir.
Çoklu görev: Çoklu görevde, aynı anda birden fazla görev yürütülür.
Çoklu okuma: Daha önce de belirtildiği gibi çoklu okuma, aynı anda birden fazla iş parçacığı yürütme işlemidir.
teknik destek mülakat soruları ve cevapları pdf
Çoklu işlem: Çoklu işlemede, birden fazla işlem aynı anda yürütülür. Çoklu göreve benzer, ancak burada birden fazla CPU söz konusudur.
Paralel İşleme: Paralel işleme, bir bilgisayar sisteminde birden fazla CPU'nun aynı anda çalıştığı bir tekniktir.
Çoklu okumayı tartıştıktan sonra, neden çok iş parçacıklı okumaya ihtiyacımız olduğu sorusu ortaya çıkıyor?
Çoklu Okumanın Faydaları
Multithreading, verimli programlamaya yardımcı olan çeşitli faydalara sahiptir.
Aşağıdaki noktalar bunu netleştirecektir.
# 1) Tek CPU Sistemlerinin Verimli Kullanımı
Sistemde tek bir iş parçacığına sahip yalnızca bir CPU olduğunda, CPU zamanı boşa harcanır. İş parçacığı, IO gibi diğer kaynakları kullanarak meşgul olduğunda, CPU boştadır. Bunu geliştirebilir ve çok iş parçacıklı uygulamalara sahip olarak CPU'yu daha iyi kullanabiliriz.
Çoklu okuma kullanarak, eğer bir iş parçacığı CPU ile yapılırsa, diğer iş parçacığı onu kullanabilir. Birden fazla iş parçacığı ile CPU boşta kalma süresi büyük ölçüde azalacaktır.
# 2) Çoklu CPU Sistemlerinin Verimli Kullanımı
Tıpkı tek CPU'lar gibi, birden çok CPU'ya sahip sistemlerde bile, çok iş parçacıklı uygulamalar birden çok CPU'yu verimli bir şekilde kullanabilir.
# 3) Duyarlılık ve Adalet açısından iyileştirilmiş kullanıcı deneyimi
Sistemin yanıt verme yeteneği, çok iş parçacıklı uygulamalarla artar. Biz deneyimlemiyoruz 'GUI asılı' uygulamada çeşitli görevleri yerine getiren birden fazla iş parçacığımız olduğunda ve kullanıcıların isteklerine yanıt almak için uzun süre beklemesine gerek kalmadığında.
Benzer şekilde, kullanıcılar çok iş parçacıklı sistemlerde düzgün hizmetlerdir.
Java'da Eş Zamanlılık Nasıl Uygulanır
Java'da eşzamanlılığı uygulayabileceğimiz ilk sınıf, java.lang.Thread sınıf. Bu Thread sınıfı, Java'da eşzamanlılığın temelini oluşturur.
Ayrıca buna sahibiz java.lang.Runnable iş parçacığı davranışını soyutlamak için bir Java sınıfı tarafından uygulanabilen arabirim. Gelişmiş uygulama geliştirme için, java.util.concurrent paket Java 1.5'ten beri mevcuttur.
İleride Java'da eşzamanlılığı ayrıntılı olarak tartışacağız. Bu eğiticide Java'daki iş parçacıkları kavramını tartışalım ve anlayalım. Çoklu iş parçacığı ile ilgili sonraki eğitimlerimizde, çeşitli çoklu iş parçacığı ve eşzamanlılık kavramlarını keşfedeceğiz.
Java'da Konu Nedir
Tek bir iş parçacığı, en küçük ve hafif işlem birimi olarak tanımlanabilir. Java'da, iş parçacıkları 'Thread' sınıfını kullanan programlarda kullanılır.
Java iş parçacıkları iki türdendir:
# 1) Kullanıcı ileti dizisi: uygulama ilk başladığında kullanıcı iş parçacığı oluşturulur. Daha sonra istediğiniz kadar kullanıcı ve daemon thread oluşturabiliriz.
# 2) Daemon dizisi: daemon iş parçacıkları esas olarak arka planda kullanılır ve uygulamayı temizleme gibi görevler için kullanılır.
Dişler, uygulamanın bakım maliyetini düşürür. Ayrıca uygulama yükünü de azaltır.
Aşağıda tek bir konu örneği gösterilmektedir:
public class Main{ public static void main (String () args){ System.out.println('This is a thread'); } }
Yukarıdaki program, uygulama başlatıldığında bir kullanıcı iş parçacığı oluşturulduğunda 'Bu bir iş parçacığıdır' gösterecektir. Yukarıdaki programda, ana işlev uygulamanın başlangıç noktasıdır ve bir kullanıcı dizisi oluşturur.
İpliğin Yaşam Döngüsü
Aşağıdaki diyagram Java'da bir iş parçacığının yaşam döngüsünü göstermektedir.
Yukarıdaki diyagramda gösterildiği gibi, Java'daki bir iş parçacığı aşağıdaki durumlara sahiptir:
# 1) Yeni: Başlangıçta, iş parçacığı sınıfından yeni oluşturulan iş parçacığı 'yeni' bir duruma sahiptir. Henüz başlamadı. Bu konu aynı zamanda 'Doğan konu' .
# 2) Çalıştırılabilir: Bu durumda, bir iş parçacığı örneği, yöntem kullanılarak çağrılır 'Başlat' .
# 3) Koşu: İş parçacığı örneğinin başlangıç yöntemi çağrılır ve iş parçacığı yürütülmeye başlar. Bu, çalışma durumudur. Çoğunlukla zamanlayıcı, iş parçacıklarını planlar ve yönetir.
# 4) Engellendi: Bir uygulamada birden çok iş parçacığı var. Bu iş parçacıkları, yürütmelerinin senkronize edilmesi gerektiğinden bir başkasını beklemek zorundadır.
# 5) Feshedildi: İş parçacığının yürütme süreci sona erdiğinde, evre sonlandırılır veya yürütülmesi durdurulur.
Böylece bir iş parçacığı önce yaratılır, sonra programlanır ve daha sonra zamanlayıcı iş parçacığını yürütür. Çalışan iş parçacığı başka bir etkinlik için engellenebilir veya askıya alınabilir. Daha sonra devam ettirilir ve işlem tamamlanırken iş parçacığı yürütülür.
Konu Öncelikleri
Bir iş parçacığı önceliği, bir iş parçacığının bir uygulamadaki diğer iş parçacıklarına göre nasıl ele alınacağına karar verir. İş parçacığı önceliği bir tam sayıdır.
Aşağıda, ileti dizisi öncelikleri hakkında hatırlanması gereken bazı noktalar listelenmiştir:
- İş parçacığı öncelikleri tam sayılardır.
- İş parçacığı önceliğini kullanarak, çalışma durumundaki bir iş parçacığından diğerine ne zaman geçmemiz gerektiğine karar verebiliriz. Bu, iş parçacıklarının bağlamlarını değiştirdiğimiz bağlam değiştirme işlemidir.
- Bir iş parçacığı her zaman gönüllü olarak CPU üzerindeki denetimini bırakabilir. Daha sonra en yüksek önceliğe sahip iş parçacığı devralabilir.
- Benzer şekilde, daha yüksek öncelikli bir iş parçacığı, daha düşük önceliğe sahip diğer tüm iş parçacıklarını önceliklendirebilir.
- Thread sınıfı, iş parçacığının önceliğini ayarlamak için kullanılan bir setPriority () yöntemi sağlar.
- Tamsayılar yerine MIN_PRIORITY, MAX_PRIORITY veya NORM_PRIORITY sabitlerini de kullanabiliriz.
Konu Oluştur
Aşağıdaki yollardan birini kullanarak bir iş parçacığı oluşturabiliriz:
- Java 'Thread' sınıfını genişletme.
- 'Runnable' ın Uygulanması.
Java 'Thread' Sınıfını Genişletme
'Thread' sınıfı, bir thread nesnesi üzerinde işlemler oluşturmamıza ve gerçekleştirmemize izin veren yapıcıları ve yöntemleri içerir. Dahili olarak Thread sınıfı, Runnable arabirimini uygular ve ayrıca Object sınıfını genişletir.
Aşağıdaki tablo, bir Thread () sınıfının çeşitli yapıcılarının ve yöntemlerinin bir özetini verir.
Oluşturucu / | Prototip | Açıklama |
---|---|---|
uyku | genel boşluk uykusu (uzun milisaniyeler) | Mevcut iş parçacığının yürütülmesi belirtilen milisaniyeler için durdurulur. |
Thread () yapıcısı | Konu() | Bir Thread nesnesi oluşturmak için varsayılan yapıcı. |
Konu (Dize adı) | Oluşturucu, belirtilen ada sahip bir Thread nesnesi oluşturmak için. | |
Konu (Runnable r) | Belirtilen Runnable arabirim nesnesiyle bir Thread örneği oluşturun. | |
Konu (Çalıştırılabilir r, Dize adı) | Belirtilen Runnable arabirim nesnesi ve verilen adla bir Thread örneği oluşturun | |
koşmak | genel void run () | Run yöntemi, bir iş parçacığı için eylemi gerçekleştirir. İpliği çağırır. |
Başlat | genel boşluk başlangıcı () | İş parçacığının yürütülmesini başlatmak için kullanılır. Dahili olarak JVM, bu iş parçacığı üzerinde run () yöntemini çağırır. |
katılmak | genel geçersiz birleştirme () | İpliğin ölmesini bekleyin |
genel geçersiz birleştirme (uzun milisaniyeler) | İş parçacığının ölmesi için belirtilen milisaniye kadar bekleyin. | |
getPriority | public int getPriority () | İş parçacığı önceliğini döndür |
setPriority | public int setPriority (int öncelik) | İş parçacığı önceliğini belirtilen önceliğe değiştirin |
getName | public String getName () | iş parçacığının adını döndür. |
setName | public void setName (Dize adı) | İş parçacığının adını belirtilen dizeye ayarlayın |
currentThread | genel Konu currentThread () | Şu anda aktif olan iş parçacığının referansını verir |
getId | public int getId () | Dönüş iş parçacığı kimliği |
getState () | public Thread.State getState () | İş parçacığının mevcut durumunu verir |
yaşıyor | public boolean isAlive () | İş parçacığının canlı olup olmadığını kontrol edin ve evet ise true dönün. |
Yol ver | kamu boşluk getirisi () | Geçerli iş parçacığını geçici olarak duraklatır ve diğer iş parçacıklarının yürütülmesine izin verir. |
isDaemon | genel boolean isDaemon () | İş parçacığının bir arka plan iş parçacığı olup olmadığını kontrol edin; evet ise doğru dön. |
setDaemon | public void setDaemon (boole b) | Eğer b = true ise, evreyi bir arka plan programı evresi olarak ayarlayın; başka bir kullanıcı iş parçacığı olarak ayarlayın. |
kesmek | public void interrupt () | Mevcut iş parçacığını kes. |
Kesildi | public boolean isInterrupted () | İpliğin kesintiye uğrayıp uğramadığını kontrol edin. |
kesildi | public static boolean interrupted () | Mevcut ipliğin kesintiye uğrayıp uğramadığını kontrol edin. |
dumpStack | Statik boşluk dumpStack () | Geçerli iş parçacığının yığın izlemesini standart hata akışına yazdırır. |
askıya almak | genel void askıya alma () | Tüm konuları askıya alır. (** yöntem en son Java sürümlerinde kullanımdan kaldırılmıştır) |
devam et | genel geçersiz özgeçmiş () | Askıya alınan ileti dizisini devam ettirin. (** yöntem en son Java sürümlerinde kullanımdan kaldırılmıştır) |
Dur | genel geçersiz durdurma () | İpliği durdurur. (** yöntem en son Java sürümlerinde kullanımdan kaldırılmıştır) |
Bu iş parçacığı yöntemlerini bir sonraki çoklu iş parçacığı öğreticimizde ayrıntılı olarak ele alacağız.
Bir iş parçacığı başlatmak
İş parçacığını başlatmak için kullanılan yöntem start () aşağıdaki adımları gerçekleştirir:
- Yeni bir CallStack ile yeni bir iş parçacığı örneği başlatır.
- İş parçacığı durumu yeniden çalıştırılabilir duruma değiştirilir.
- İş parçacığının dönüşü olduğunda, run () yöntemini çalıştırır.
'Çalıştırılabilir' Arayüzün Uygulanması
Runnable arayüzü kullanılarak bir iş parçacığı örneği de oluşturulabilir. Bir iş parçacığı örneği oluşturmak için, nesneleri bir evre tarafından yürütülmesi gereken sınıf Runnable arabirimini uygulamalıdır.
Runnable arayüzünün yalnızca bir yöntemi vardır:
public void run () => this method is used to execute the thread.
Konu Sınıfı Örneği
Şimdi, iş parçacığı sınıfını kullanarak Java'daki iş parçacığını gösterelim.
//class inherited from 'Thread' class ThreadClassDemo extends Thread { private int number; //class constructor public ThreadClassDemo(int number) { this.number = number; } //run method => execution code for thread public void run() { int counter = 0; int numInt = 0; //prints the number till specified number is reached, starting from 10 do { numInt = (int) (counter + 10); System.out.println(this.getName() + ' prints ' + numInt); counter++; } while(numInt != number); System.out.println('** Correct! ' + this.getName() + 'printed ' + counter + ' times.**'); } } public class Main { public static void main(String () args) { System.out.println('Starting thread_1...'); //create a thread class instance Thread thread_1 = new ThreadClassDemo(15); //start the thread thread_1 thread_1.start(); try { //wait for thread_1 to die thread_1.join(); } catch (InterruptedException e) { System.out.println('Thread interrupted.'); } System.out.println('Starting thread_2...'); Thread thread_2 = new ThreadClassDemo(20); //start thread_2 thread_2.start(); System.out.println('main() is ending...'); } }
Çıktı
android telefonlar için en iyi müzik indirici
Çalıştırılabilir Arabirimi Kullanan Java İş Parçacığı
Aşağıdaki örnek, bir iş parçacığı örneği oluşturmak için Runnable arabiriminin kullanımını gösterir.
//class implements Runnable interface class RunnableDemo implements Runnable { private String message; //class constructor public RunnableDemo(String message) { this.message = message; } //run method public void run() { while(true) { System.out.println(message); } } } public class Main { public static void main(String () args) { //create first thread instance hello Runnable hello = new RunnableDemo('Hello, Greetings!!!'); Thread thread1 = new Thread(hello); thread1.setDaemon(true); //set this thread as daemon thread1.setName('hello'); System.out.println('Starting First thread...'); //start the thread thread1.start(); //create second thread instance bye Runnable bye = new RunnableDemo('Bye for now!!'); Thread thread2 = new Thread(bye); thread2.setPriority(Thread.MIN_PRIORITY); //set priority to min thread2.setDaemon(true); //set as daemon thread System.out.println('Starting goodbye thread...'); //start the thread thread2.start(); System.out.println('main() is ending...'); } }
Çıktı
Java'da Bir Konu Nasıl Durdurulur
Yukarıdaki iplik örneklerini gördük. Bu örneklerden, run yöntemi yürütmeyi bitirdiğinde, iş parçacığının durduğunu veya bazı istisnalar nedeniyle de durduğunu biliyoruz.
Java'nın önceki sürümlerinde, iş parçacığını doğrudan durdurmak için kullanılabilen Thread sınıfında bir stop () yöntemi vardı. Ancak artık güvenlik nedeniyle kullanımdan kaldırılmıştır. Bu nedenle, çalışan iş parçacığını durdurmak için diğer yöntemleri kullanmamız gerekir.
İş parçacığını durdurmak için kullanabileceğimiz iki yöntem var.
- Uçucu bir boole değişkeni kullanma
- Kesmeleri Kullanma.
Bu bölümde, bir iş parçacığını durdurmanın bu iki yöntemini de tartışacağız.
Geçici Bir Boole Değişkeni Kullanma
Bu yöntemde, iş parçacığını durdurmak için bayrak gibi bir boole değişkeni tutuyoruz. İş parçacığı, boole değişkeni true olarak ayarlandığı sürece çalışır. Yanlış hale geldiği an, iş parçacığı durdurulur.
Bu yöntemin özelliği, boole değişkenini ' uçucu 'Böylece her zaman ana bellekten okunur ve program onu CPU önbelleğinde önbelleğe alamaz. Bu şekilde ayarlanan ve okunan değerlerde herhangi bir fark olmayacaktır.
Uçucu bir boolean değişkeni kullanarak bir iş parçacığını durdurmanın uygulanması aşağıda gösterilmiştir.
class StopThread extends Thread { private volatile boolean stop_flag = true; //initially set to true public void stopRunning() { stop_flag = false; //set stop_flag to false } @Override public void run() { while (stop_flag) { //keep checking value of stop_flag System.out.println('Thread is running...'); } System.out.println('Thread stopped!!!'); } } public class Main { public static void main(String() args) { //create a thread instance StopThread stop_thread = new StopThread(); //start the thread stop_thread.start(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //call stopRunning() method to stop the thread stop_thread.stopRunning(); } }
Çıktı
Not: Burada çıktının sadece bir kısmını gösterdik. İplik durmadan önce birkaç dakika çalışabilir. Böylece farklı sistemlerde farklı çıktılar elde edebiliriz.
Kesmeleri Kullanma
Burada evre, yukarıda evre sınıfı yöntemlerinde tartıştığımız gibi interrupt () yöntemi kullanılarak durdurulur. İnterrupt () yöntemi, iş parçacığının durumunu kesilmiş olarak ayarlar. Bu durum, run () yönteminin while döngüsüne geçirilir. İnterrupted () yöntemini kullanarak interrupted durumunu elde edebiliriz.
Aşağıdaki program, iş parçacığını durdurmak için interrupt () yönteminin kullanımını göstermektedir.
class StopThread extends Thread { @Override public void run() { while (!Thread.interrupted()) { //check for interrupted status System.out.println('Thread is running...'); } System.out.println('Thread stopped!!!'); } } public class Main { public static void main(String() args) { //create a thread instance StopThread stop_thread = new StopThread(); //start the thread stop_thread.start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } //interrupt the thread stop_thread.interrupt(); } }
Çıktı
Sıkça Sorulan Sorular
S # 1) Java'da neden Multithreading kullanıyoruz?
Cevap: Çoklu okuma, bir uygulamada iki veya daha fazla iş parçacığının eşzamanlı veya eşzamanlı olarak yürütülmesine izin verir. Eşzamanlı yürütme, Verimi en üst düzeye çıkarır ve ayrıca CPU'yu maksimumda kullanır.
S # 2) Multithreading nedir? Türleri nelerdir?
Cevap: Çoklu okuma, birden fazla iş parçacığı yürütmek anlamına gelir. Bu yürütme eşzamanlı veya paralel olabilir. Bu nedenle, çoklu okuma iki tipe sahiptir, yani eşzamanlı veya paralel.
S # 3) Çoklu Okumaya Karşı Çoklu İşlem nedir?
Cevap: Çoklu okumada, aynı veya farklı işlemler için birden fazla iş parçacığı vardır ve bu iş parçacıkları, bir sistemin hesaplama hızını artırmak için eşzamanlı olarak yürütülür. Çoklu işlemede, bir sistem ikiden fazla CPU'ya sahiptir ve birden çok işlem aynı anda yürütülür.
S # 4) Java'da Multithreading'in avantajları nelerdir?
Cevap: Çoklu okumayı kullanarak bir uygulamanın farklı bölümlerini eş zamanlı olarak thread kullanarak çalıştırabiliriz. Çoklu okuma, sistem verimini artırır. Multithreading ayrıca, farklı iş parçacıkları sürekli olarak CPU'yu kullandığından CPU kullanımını en üst düzeye çıkarır.
S # 5) Multithreading oyun oynamak için iyi midir?
Cevap: Evet, özellikle modern oyunlar için.
Sonuç
Bu tamamen çoklu okumanın tanıtımı ile ilgili. Bu eğitimde Java'da eşzamanlılığı ve çoklu iş parçacığını tartıştık. Thread sınıfının yanı sıra Runnable arayüzü ile bir iş parçacığı oluşturulmasını tartıştık ve uygun örnekler sağladık.
Ayrıca tek bir ipliğin kavramlarını ve yaratılışını detaylı olarak öğrendik. Bir iş parçacığının yaşam döngüsü, bir iş parçacığını durdurma, iş parçacığı türleri vb. Dahil olmak üzere iş parçacığı kavramları bu eğiticide tartışılmıştır.
Ayrıca Java'da uzunlamasına çoklu okuma ve eşzamanlılığı tartıştık. Bu eğitimin sonunda okuyucu eşzamanlılık ve çoklu okuma kavramlarını ve ayrıca Java'daki konuları kolayca kavrayabilmelidir.
=> Basit Java Eğitim Serisine Buradan Dikkat Edin.
Önerilen Kaynaklar
- Örneklerle C ++ 'da Çoklu Okuma
- Yöntemler ve Yaşam Döngüsü İçeren Java Konuları
- Thread.Sleep () - Örneklerle Java'da Thread Sleep () Yöntemi
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- Örneklerle Java Yansıtma Eğitimi
- Java Dizesi () Örneklerle Yöntem Eğitimi içerir
- Java'da Jagged Array - Örneklerle Eğitim
- Örneklerle Java Tarayıcı Sınıfı Eğitimi