Java Threads

advertisement
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.
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
İş parçacıklarının oluşturulması
• Java’da bir iş parçacığı oluşturmak için iki
yöntem:
• Runnable interface kullanarak
(java.lang.Runnable)
• Thread sınıfını extend ederek
(java.lang.Thread)
Runnable
The Runnable Interface Signature
public interface Runnable {
void run();
}
• 1. A class implements the Runnable interface, providing the run() method
that will be executed by the thread. An object of this class is a Runnable
object.
• 2. An object of Thread class is created by passing a Runnable object as
argument to the Thread constructor. The Thread object now has a
Runnable object that implements the run() method.
• 3. The start() method is invoked on the Thread object created in the
previous step. The start() method returns immediately after a thread has
been spawned.
• 4. The thread ends when the run() method ends, either by normal
completion or by throwing an uncaught exception.
• A thread enters the "Not Runnable" state
when one of these four events occur:
• someone calls its suspend() method
• someone calls its sleep() method
• the thread uses its wait() method to wait on a
condition variable
• the thread is blocking on I/O.
class RunnableThread implements Runnable {
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(Thread.currentThread());
}
Thread runner;
public RunnableThread() {
}
public RunnableThread(String threadName) {
runner = new Thread(this, threadName);
// (1) Create a new thread.
System.out.println(runner.getName());
runner.start(); // (2) Start the thread.
}
public void run() {
//Display info about this particular thread
System.out.println(Thread.currentThread());
}
}
}
Extending Thread Class
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.
class ThreadClass extends Thread {
private long basla;
public ThreadClass(String isim) {
super(isim);
}
public void yaz() {
try {
for (int i = 0; i < 10; i++) {
sleep(500);
long simdi = System.currentTimeMillis();
System.out.println(getName() + " " + (simdibasla));
}
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println(System.currentTimeMillis()
);
}
public void run(){
yaz();
}
}
public class ThreadOrnek {
public static void main(String[] args) {
long basla = System.currentTimeMillis();
System.out.println(basla);
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("----------------");
// t1.yaz();
// t2.yaz();
// t3.yaz();
long son = System.currentTimeMillis();
System.out.println("GECEN ZAMAN = " +
(son-basla));
Long a = new Long("1204845710750");
Long b = new Long("1204845705734");
System.out.println((a.longValue()b.longValue()));
}
•
•
•
•
•
thread3
Thread[thread3,5,main]
Thread[thread1,5,main]
Thread[thread2,5,main]
Thread[main,5,main]
Download