25
DR.GALİP AYDIN Java Threads

Java Threads

  • Upload
    quincy

  • View
    21

  • Download
    1

Embed Size (px)

DESCRIPTION

Java Threads. Dr.Galip AYDIN. Java Threads ( İş Par ç ac ı klar ı ). Multithreading: Program içerisinde aynı anda birden fazla işin yapılabilmesi. Aynı program içerisinde birçok Thread çalışabilir. - PowerPoint PPT Presentation

Citation preview

Page 1: Java Threads

DR.GALİP AYDIN

Java Threads

Page 2: Java Threads

Java Threads (İş Parçacıkları)

Multithreading:Program içerisinde aynı anda birden fazla işin yapılabilmesi.

Aynı program içerisinde birçok Thread çalışabilir.

Java’da bütün Thread sınıfları java.lang.Thread class kullanılarak oluşturulur ve kontrol edilir.

Bu iş parçacıkları eşzamanlı olarak asenkron veya senkron olarak çalışabilir.

Page 3: Java Threads

Multithreading vs. Multiprocessing

• Bağımsız işlemlerle karşılaştırıldığında iş parçacıkları daha hafiftir

• İş parçacıkları aynı adres alanını paylaştıkları için veri ve kodları paylaşabilir.

• Context switching (içerik değiştirme) iş parçacıklarında işlemlere göre daha az pahalıdır

• İş parçacıkları arası haberleşme işlemler arası haberleşmeye göre daha ucuzdur

• İş parçacıkları farklı görevlerin aynı zaman aralığında gerçekleştirilmesine olanak sağlarlar

Page 4: Java Threads
Page 5: Java Threads

Java Threads

thread bir nesne değil bir akış kontrolü yöntemidir

Sırayla işletilecek bir dizi komut barındırırThread bir nesnedir

void start() Yeni bir Thread oluşturup çalışabilir hale getirir

void run() Yeni Thread hayatına bu metodun içinde başlar

Page 6: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 7: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 8: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 9: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 10: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 11: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 12: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 13: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 14: Java Threads

Thread Oluşturulması

Thread t = new BThread();

t.start();

doMoreStuff();

Object A

BThread() {}

void start() {// create thread

}

void run() {doSomething();

}

Object BThread (extends Thread)

Page 15: Java Threads

İş parçacıklarının oluşturulması

Java’da bir iş parçacığı oluşturmak için iki yöntem kullanılır:

1.Runnable interface kullanmak (java.lang.Runnable)

2.Thread sınıfını extend etmek (java.lang.Thread)

Page 16: Java Threads

Runnable Interface

Thread nesnesine yardımcı bir nesnedirThread nesnesinin run() metodu Runnable

nesnesinin run() metodunu çağırırThread’in kalıtıma bağlı olmadan, herhangi

bir nesnenin içinde çalışmasını sağlar

Page 17: Java Threads

Runnable Interface

The Runnable Interface Signaturepublic interface Runnable {void run();} • 1. Herhang bir sınıf Runnable Interface’ini thread

tarafından çalıştırılacak olan run() metodunu sağlayarak implement eder.

• 2. Thread sınıfının bir nesnesi, kurucu metoduna bir Runnable nesnesi geçilerek oluşturulur. Şimdi Thread nesnesinin run() metodunu implement eden bir Runnable nesnesi var.

• 3. Önceki adımda oluşturulan Thread nesnesinin start() metodu uyarılır. Bu metod yeni bir thread başlatılır başlatılmaz kontrolü döndürür.

• 4. run() metodu biter bitmez thread biter.

Page 18: Java Threads

Not Runnable

Bir thread "Not Runnable" durumuna aşağıdaki dört durumdan birisi oluşunca girer:

1.suspend() metod u çağrılınca2.sleep() metodu çağrılınca3.Thread wait() metodu kullanarak bir şart

değişkenini beklemek için kullanıyorsa4.I/O için blok olmuşsa.

Page 19: Java Threads

Thread Lifecycle

Born

BlockedRunnable

Dead

stop()

start()

stop()

Active

block on I/O

I/O available

JVM

sleep(500)

wake up

suspend()

resume()

wait

notify

Page 20: Java Threads

class RunnableThread implements Runnable {

Thread runner;

public RunnableThread() { }

public RunnableThread(String threadName) {

runner = new Thread(this, threadName);

System.out.println("RUNNER " + runner.getName());

runner.start(); }

public void run() {System.out.println("INFO: " + Thread.currentThread());

}}

public class RunnableOrnek {

public static void main(String[] args) {

Thread thread1 = new Thread(new RunnableThread(), "thread1");

Thread thread2 = new Thread(new RunnableThread(), "thread2");

RunnableThread thread3 = new RunnableThread("thread3");

//Start the threads thread1.start(); thread2.start(); try { //delay for one second

Thread.currentThread().sleep(1000); } catch (InterruptedException e) { } //Display info about the main thread System.out.println("MAIN " +

Thread.currentThread()); }}

Page 21: Java Threads

RUNNER thread3INFO: Thread[thread3,5,main]INFO: Thread[thread2,5,main]INFO: Thread[thread1,5,main]MAIN Thread[main,5,main]

Page 22: Java Threads

2. Yöntem: Thread Sınıfının Extend Edilmesi

1. Thread sınıfını extend eden bir sınıf, Thread sınıfının run() metodunu yeniden oluşturarak yürütülecek kodu tanımlar.

2. Bu sınıf kurucu metodunda iş parçacığını başlatmak için Thread kurucu metodunu super() kullanarak uyarabilir.

3. Thread sınıfından miras alınan start() metodu iş parçacığını başlatacak olan sınıfta çağrılır.

Page 23: Java Threads

class ThreadClass extends Thread {

private long basla;

public ThreadClass(String isim) {

super(isim);

}

public void yaz() {

try {

for (int i = 0; i < 5; i++) {

sleep(500);

long simdi = System.currentTimeMillis();

Calendar c = Calendar.getInstance();

c.setTimeInMillis(simdi);

System.out.println(getName() + " " + c.getTime().toString());

//System.out.println(getName() + " " + (simdi-basla));

}

} catch (Exception ex) {

ex.printStackTrace();

}

//System.out.println(System.currentTimeMillis());

}

public void run(){

yaz();

System.out.println(getName() + " EXITING");

}

}

Page 24: Java Threads

import java.util.Calendar;

public class ThreadOrnek { public static void main(String[] args) { long basla = System.currentTimeMillis();

ThreadClass t1 = new ThreadClass("Thread 1"); ThreadClass t2 = new ThreadClass("Thread 2"); ThreadClass t3 = new ThreadClass("Thread 3");

t1.start(); t2.start(); t3.start(); System.out.println("----------------"); long son = System.currentTimeMillis(); System.out.println("GECEN ZAMAN = " + (son-basla)); }}

Page 25: Java Threads

GECEN ZAMAN = 0Thread 1 Mon Mar 02 12:51:36 EET 2009Thread 2 Mon Mar 02 12:51:36 EET 2009Thread 3 Mon Mar 02 12:51:36 EET 2009Thread 1 Mon Mar 02 12:51:36 EET 2009Thread 2 Mon Mar 02 12:51:36 EET 2009Thread 3 Mon Mar 02 12:51:36 EET 2009Thread 1 Mon Mar 02 12:51:37 EET 2009Thread 2 Mon Mar 02 12:51:37 EET 2009Thread 3 Mon Mar 02 12:51:37 EET 2009Thread 1 Mon Mar 02 12:51:37 EET 2009Thread 2 Mon Mar 02 12:51:37 EET 2009Thread 3 Mon Mar 02 12:51:37 EET 2009Thread 1 Mon Mar 02 12:51:38 EET 2009Thread 1 EXITINGThread 2 Mon Mar 02 12:51:38 EET 2009Thread 2 EXITINGThread 3 Mon Mar 02 12:51:38 EET 2009Thread 3 EXITING