Bölüm 27 Thread’ler 27.1 Thread kavramı Çok Kanallı Programlama (Multi-Threaded Programming), bir programda aynı anda birden fazla işin yapılabilmesidir. Yani bir kod parçası bir işlemi gerçekleştirirken aynı anda ona paralel olarak bir başka kod parçasının çalışması demektir. Birbirine paralel çalışan çalışanlardan her birine kanal (thread) adı verilir. 27.2 Thread Nedir ? Bir programın paralel olarak çalışan alt parçacıklarına Thread denir . Böylece bir program içerisinde birden fazla Thread oluşturabiliriz . Örnek verirsek ; bir program içerisinde bir thread A tablosunda güncelleme yaparken , diğer bir thread B tablosunda güncelleme yapabilir . Böylece paralel olarak işlemler yapabilmiş oluruz.Böylece 2. işlemi yapmak için 1. işlemin bitmesine gerek kalmaz 27.3 Thread Örneği Java çok kanallı porgramlamayı temelden desteklemektedir. Aslında her Java programı bir kanalda (thread’te) çalışır. Örneğin application’ların main method’unun çalıştırılmasıyla adı ‘main’ olan bir ana thread çalıştırılır. Ancak tek bir kanal olunca programcı yazdığı kodun bir thread’in içerisinde çalıştığını farketmez. Thread bize eş zamanlı birden fazla işi yapma fırsatını yani multitasking sağlıyor. Thread’in faydaları: I. Kaynak paylaşımı II. Daha az bekleme süresi III. Daha verimli donanım kullanımı(Multiprocessor kullanımı) Yeni bir thread yaratıldığında biz start komutu vermedikçe thread çalışmaya başlamıyor hazır durumda bekliyor. Biz start komutunu verdiğimizde çalışmaya başlıyor. Ayrıca thread’i sleep komutu ile belli süre bekletebiliyor, stop komutu ile öldürebiliyoruz. Resimde gördüğümüz gibi threadler aynı kodu, veriyi ve dosyaları kullanmasına rağmen farklı register ve stack’leri vardır. Bu sayede aynı kod içinde farklı işler yapıp farklı şeyleri hafızada tutabiliyor. Basit bir thread örneği(ThreadTest.java): import java.util.*; public class ThreadTest extends Thread { public void run() { while (true) { try { Thread.sleep(1000); System.out.println("Thread time : " + new Date()); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { ThreadTest thread1 = new ThreadTest(); thread1.start(); ThreadTest thread2 = new ThreadTest(); thread2.start(); System.out.println("Main thread"); } } Bu programda ekrana “main thread” yazdıktan sonra threadimiz başlatılarak 1 saniye aralıklarla tarihi ekrana yazıdırıyor. 27.4 Çoklu Thread Örneği //ThreadTester.java //Show multiple threads printing at different intervals. public class ThreadTester { public static void main(String args[]) { PrintThread thread1, thread2, thread3, thread4; thread1 = new PrintThread("thread1"); thread2 = new PrintThread("thread2"); thread3 = new PrintThread("thread3"); thread4 = new PrintThread("thread4"); System.out.println("---Starting threads---"); thread1.start(); thread2.start(); thread3.start(); thread4.start(); //for(int i=0;i<10000000;i++); System.out.println("---Threads started---"); } } class PrintThread extends Thread { private int sleepTime; // PrintThread constructor assigns name to thread // by calling Thread constructor public PrintThread(String name) { super(name); // sleep between 0 and 5 seconds sleepTime = (int) (Math.random() * 5000); } // execute the thread public void run() { // put thread to sleep for a random interval try { System.out.println(getName() + " going to sleep"); Thread.sleep(sleepTime); } catch (InterruptedException exception) { System.out.println(exception.toString()); } // print thread name System.out.println(getName() + " done sleeping"); } }