Bölüm 24

advertisement
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");
}
}
Download