Fazla zaman tüketen bir iş parçacığı,
Thread sınıfının
yield() metodunu çağırarak diğer iş parçacıklarına yürütülmeleri için izin verebilir.
Eğer bir iş parçacığı
yield() metodunu çağırırsa, programlayıcı güncel ola iş parçacığını durdurup bekleyenlerden birin izin verebilir.
Bu nedenle,
yield() metodunu çağıran iş parçacığı programcının tekrar kendisine dönmesi için bekleyecektir.
Aşağıdaki örnek
yield() metodunun kullanılışını gösterir:
Kod |
Çıktı
yield() kullanmadan |
Çıktı
yield() kullanarak |
public class MyThread extends Thread {
public MyThread(String name){
super(name);
}
public void run(){
for(int i=0; i<3; i++){
System.out.println(getName());
yield();
}
}
public static void main(String[] args) {
MyThread t1 = new MyThread("t1");
MyThread t2 = new MyThread("t2");
t1.start();
t2.start();
}
}
|
t1
t1
t1
t2
t2 t2 |
t1
t2
t1
t2
t1 t2
|
Not:
Yukarıdaki örnekte, her iş parçacığına onun yapılandırıcısı aracılığıyla bir isim atanmıştır.
İş parçacığının adı
getName() metodu ile döndürülebilir.
Bir iş parçacığının yürütülmesini belirli bir zaman kadar durdurmak için
sleep(<milisaniye şayisi>);
sleep() metodu su şekilde kullanılabilir:
Uyuyan bir iş parçacığı CPU u kullanmaz. Belirtilen sure geçtikten sonra, programlayıcı tarafından yürütülmesine izin verilebilir. Yani bekleme zamanı belirtilen sureden uzun
olabilir. Eğer iş parçacığı uyuma suresinde kesilirse, sleep() metodu döndürüldüğünde InterruptedException atılır.
join() metodu bir iş parçacığının, bir başka iş parçacığının yürütülmesinin tamamlanmasına kadar beklemesini sağlar.
sleep() metodu gibi, kesilmek istenirse InterruptedException atar.
Aşağıdaki örnekte, t1 tamamlandıktan sonra yürütülme devam eder.
Thread t1 = new Thread(…);
t1.start();
…
t1.join();
// asagidaki ifade t1 oldukten sonra devam edecektir.
…