İş Parçacıkları (Threads)

Benzer belgeler
İŞ PARÇACIKLARI (THREADS)

Görsel Programlama DERS 11. Görsel Programlama - Ders11/ 1

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

Nesne Yönelimli Programlama

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Java Dersi. Altuğ Bilgin Altıntaş

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Yeni G/Ç (new I/O) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 10 1

7. HAFTA. Erişim Belirleyiciler

Erişim konusunda iki taraf vardır:

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Nesne Yönelimli Programlama

SINIFLARIN TEKRAR KULLANILMASI

Multithreading & Asynchronous Programlama

Java Class Yapısında Finalize Metotunun Kullanımı

BİL-141 Bilgisayar Programlama I (Java)

JAVA PROGRAMLAMAYA GİRİŞ

KARADENİZ TEKNİK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR AĞLARI LABORATUARI. Soket Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

4.Hafta. this Anahtar Sözcüğü

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

JAVA DA GİRİŞ/ÇIKIŞ İŞLEMLERİ. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 9 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Polimorfizm. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 3

İş Parçacıkları Thread(s)

YZM 3102 İşletim Sistemleri

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

F.Ü. Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuvarı DENEY NO: 6 JAVA İLE DAĞITIK PROGRAMLAMA.

Ağ Sunucusu Programlaması. Bora Güngören Portakal Teknoloji

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

Programlama Dillerinde Kullanılan Veri Tipleri

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Dağıtık Sistemler CS5001

Multicore/Multithread Programlama

Başlangıç Durumuna Getirme ve Temizlik. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 3 1

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

JAVA ile DAĞITIK PROGRAMLAMA

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

İŞLETİM SİSTEMLERİ DÖNEMİÇİ SINAVI

PORT HABERLEŞME SERİ PORT FARUK BOZAN

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

İŞLETİM SİSTEMLERİ. (Operating Systems)

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1

Yazılım Kodlama ve İ simlendirme Standartları v1.0

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

Öğr. Gör. Serkan AKSU 1

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

İşletim Sistemlerine Giriş

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Java da İstemci Tarafı Uygulamalar

Java da Program Denetimi ve Operatörler

Ders 8 Konu Özeti ve Problemler

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

İstisnalar (Exceptions) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 1

Algoritma ve Akış Diyagramları

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

Bölüm 6: İşlem Senkronizasyonu (2) Operating System Concepts with Java 8 th Edition

İşletim Sistemlerine Giriş

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

Nesne Yönelimli Programlama

Dağıtık Sistemler CS5001

İşletim Sistemlerinde Çok Prosesli Çalışma

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Nesne Yönelimli Programlama

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Görevler Arası Zamanuyumlama

Bölüm 7: Kilitlenme (Deadlocks)

BİL-142 Bilgisayar Programlama II

Başlangıç Durumuna Getirme ve Temizlik

// hataları işaret eden referans

Ağ programlama (Network programming) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 1

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Üst Düzey Programlama

Java Programlamada Paket Yapısı Ve Import

Nesneye Dayalı Programlama

4. Bölüm Programlamaya Giriş

NESNEYE YÖNELİK PROGRAMLAMA

İşletim Sistemlerine Giriş

Bölüm 12. Nesne yönelimli programlama desteği

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi SERVİS BİLEŞENLERİ. BLM401 Dr.Refik SAMET

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

POLIMORFIZM. Java ve Yazılım Tasarımı ; Bölüm- 6. Örnek: PolimorfizmOrnekBir.java (yorum ekle)


Transkript:

İş Parçacıkları (Threads) Bir elin nesi var iki elin sesi var -Atasözü- Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 1

İŞ PARÇACIKLARI (THREADS) Geçen bölümlerde yapılan uygulama örnekleri hep sıralıydı. Program başlar, belli bir yolu izleyerek işlemler yapar ve biterdi. Selam.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 2

Çoklu İş Parçacıklarına ne zaman ihtiyaç duyulur? Bu durumlara en iyi örnek tarayıcılardır (browser). İstenilen sayfanın indirilmesi için bir iş parçacığı İndirilmiş olan GIF dosyalarını oynatmak için bir iş parçacığı Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 3

Sohbet I Şimdi öyle bir uygulama düşünelim ki: Bu uygulama bir dosyadan okuma yapsın, Okuduğu veri üzerinde hesaplama yapıp, Hesaplamanın sonucunu başka bir dosyaya yazsın. Burada kaç işlemden bahsediyoruz? 1. Dosyadan okuma yapma (G/Ç) 2. Okunan veri üzerinde hesaplama yapma (CPU çalışıyor) 3. Hesaplama sonucunu başka bir dosyaya yazma (G/Ç) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 4

Sohbet II (Tek bir iş parçacığından oluşmuş uygulamanın aşamaları ) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 5

Sohbet III ( 1. Tasarım) Bu uygulamanın gerçekleştirmesi gereken 3 ana işlem (okuma-hesaplama-yazma) olduğunu biliyoruz. Bu üç işlemi tek bir iş parçacığında yapmaktansa, üç ayrı iş parçacığı içerisinde yaparsak sonuç nasıl değişir? Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 6

Sohbet IV (2. Tasarım) İş parçacıkları ile aşağıdaki gibi bir tasarım da yapılabilir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 7

İş Parçacıklarının Başlatılması Tek başına çalışabilen (standalone) uygulamaların başlangıç yeri statik main() yordamı (methods) olduğunu daha evvelden belirtmiştik. Uygulama çalışmaya başladığında, ana iş parçacığı oluşturulup olayların akışı başlatılır. Java programlama dili ile yazdığımız uygulamaların içerisinde çoklu iş parçacıklarını kullanmak için java.lang.thread sınıfını veya java.lang.runnable arayüzünü kullanmamız gerekir. OrnekBir.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 8

ÖrnekBir.java uygulamasının çalışması Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 9

Haller Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 10

Öncelik Sırası Aynı öncelik sırasına sahip olan iş parçacıkları aynı hazır durum havuzunda bulunurlar. Thread.MIN_PRIORITY = 1 Thread.NORM_PRIORITY = 5 Thread.MAX_PRIORITY = 10 OrnekIki.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 11

İş Parçacıklarının Sonlandırılması Bir iş parçacığının sonlanması onun ölmesi anlamına gelir. Peki bir iş parçacığı nasıl öldürebiliriz? Birinci yol ilgili iş paçacığının stop() yordamını çağırarak gerçekleştirilebilir ama bu tavsiye edilmiyen bir yoldur. İkinci yol nasıl olabilir? OrnekUc.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 12

İş Parçacıklarının Kontrolü sleep() : Çalışan iş parçacığının belirli bir süre uyumasını sağlar. Bu statik bir yordamdır; yani bu sleep() yordamını çağırmak için java.lang.thread sınıfından türemiş alt bir sınıfın new() anahtar kelimesi ile oluşturulması gerekmez. interrupt() : Uyuyan bir iş parçacığını uyandırmanın yolu onu rahatsız etmektir. Bu rahatsızlık verme olayını interrupt() yordamını çağırarak başarabiliriz. UykuTest.java UyanmaVakti.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 13

sleep() yordamı Elimizde 3 adet iş parçacığı olduğunu ve bu üç iş parçacığının da aynı anda başlatıldıklarını hayal edelim... UyurGezer.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 14

UyurGezer.java uygulamasının ekran çıktısı Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 15

yield() Yordamı Bir iş parçacığı çalıştırılıyor halinde iken, bu iş parçacığı ile aynı öncelik sırasına sahip başka bir iş parçacığına çalıştırılma fırsatı vermek istiyorsak yield() yordamını kullanmamız gereklidir. YieldOrnek.java Normal bir şekilde çalıştıralım... Şimdi 9. satırındaki yorum satırını açalım, derleyelim ve çalıştıralım... Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 16

join() Yordamı join() yordamı, bir iş parçacığının diğer bir iş parçacığını beklemesi için kullanılır. join() yordamının üç adaş yordamı (overloaded) bulunur. join() join(long milisaniye) join(long milisaniye, int nanosaniye) Belirtilen iş parçacığı bitene (ölü haline gelene kadar) kadar bekletir. Belirtilen iş parçacığını, verilen milisaniye kadar bekletir. Belirtilen iş parçacığını, verilen milisaniye + nano saniye kadar bekletir. JoinTest.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 17

Tasarım - Thread Sınıfından Kalıtım Bir sınıfa ait nesneyi iş parçacığına dönüştürmek için iki tasarım modeli bulunmaktadır. Bunlardan ilki, şu ana kadar yaptığımız gibi ilgili sınıfı java.lang.thread sınıfından türetmektir. public class OrnekSinif extends Thread { } public void run() { //... } Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 18

Tasarım - Thread Sınıfından Kalıtımın Avantajları Bu tasarımın avantajı daha kolay kodlama denilebilir. Örneğin run() yordamının içerisinde getname() yordamını direk çağırabiliriz. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 19

Tasarım - Thread Sınıfından Kalıtımın Dezavantajları Java programlama dilinde bir sınıf ancak ve ancak tek bir diğer sınıftan türetilebildiği için (single inheritance) bu model kullanılarak tasarlanan iş parçacıklarında belirli kısıtlamalar gündeme gelebilir. Tasarımı bozmak gerekli!! Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 20

Tasarım - Runnable Arayüzü Runnable arayüzü sayesinde bir sınıfı iş parçacığına dönüştürmek mümkündür. Runnable arayüzünü kullanmanın dezavantajları olarak daha uzun kodlama denilebilir. ArayuzTest1.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 21

Nesnenin Kilidi Her nesnesin kendisine ait bir kilidi bulunur. Bir sınıfa ait bir nesne oluşturulunca bu kilit otomatik olarak oluşur. Bu kilidi eline geçiren iş parçacığı, kritik alan üzerinde işlem yapmaya hak kazanır. Kritik alan, birden fazla iş parçacığının aynı anda üzerinde işlem yapmaması gereken bölgedir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 22

Kritik Alan Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 23

synchronized Anahtar Kelimesi - I Bir yordam veya yordamın içerisindeki kritik bir bölge synchronized anahtar kelimesi ile korunma altına alınabilir. Korunma altına alınmaktan kasıt, aynı anda iki veya daha fazla iş parçacığının bu kritik bölgeye veya yordamın komple kendisine erişmesini engellemektir. public synchronized void verikoy(int gelenveri) { // tum yordam koruma altinda // ayni anda bir tek is parcacigi erisebilir } public void verikoy(int gelenveri) { synchronized(this) { // sadece belirli bir kisim koruma altinda } } Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 24

synchronized Anahtar Kelimesi - II Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 25

synchronized Anahtar Kelimesi - III FotokopiMakinasi.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 26

wait(), notify() ve notifyall() Yordamları Her nesnenin bir kilidi olduğu gibi bir de bekleme havuzu (object's monitor) bulunur. Bu bekleme havuzuna iş parçacıkları atılır -wait()- veya bu havuzdan dışarı çıkartılır - notify()/notifyall() - Bu beş yordam (wait() yordamının iki de adaş yordamı bulunur), java.lang.object nesnesinin içerisinde bulunur. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 27

Semafor (Semaphore) Kaynağın az olduğu durumlarda bir çok iş parçacığı arasında bir düzen sağlamak gereklidir. Semaphore.java SemaphoreTest.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 28

Kilitlenme (Deadlock) - I Kilitlenme, ilgili iş parçacıklarının sonsuza kadar beklemesi anlamına gelir. Bunun sebeplerinden biri, iki iş parçacığının karşılıklı nesne kilitlerini beklemesinden kaynaklanır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 29

Kilitlenme (Deadlock) - II Kilitlenme.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 30

Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 31

Sorular... Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 11 32