Logo

dev-resources.site

for different kinds of informations.

Java Thread Sınıfı

Published at
1/19/2022
Categories
java
thread
synchronized
Author
ozgur
Categories
3 categories in total
java
open
thread
open
synchronized
open
Author
5 person written this
ozgur
open
Java Thread Sınıfı

Thread yapısı, aynı anda ve birbirini beklemeden birden çok işin gerçekleşebildiği yapıdır.

Thread oluştururken, java'da thread sınıfı extend edilebilir ya da runnable implementasyonu tercih edilebilir.

Java'da sadece bir sınıf extend edilebildiği ve daha fazla esneklik sağlamak için runnable implementasyonu daha avantajlıdır.

Önemli tanımlar
Runnable: Thread tanımlarının ne yapması gerektiğini açıklayan bir arayüzdür.
Run: Ana thread bekleme yaparak, diğer thread'ler çalışır.
Start: Ana thread bekleme yapmadan, diğer threadler ile birlikte çalışır.
Join: Mevcut thread işini bitirmeden, diğer thread işine başlayamaz.,
Synchronized: Method'a ulaşmak isteyen threadler method'a sıra ile girerler ve bir thread method'u bitirmeden diğer thread başlayamaz. (Kilitleme mekanizması vardır. Özetle, thread'ler birbirlerinin üstüne basmazlar)

Örnek Uygulama 1

package com.app.thread;
import java.util.List;

public class ThreadExample extends Thread implements Runnable{
    private List<Integer> v;
    public Integer sum = 0;

    public ThreadExample(List<Integer> p) {
        this.v = p;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " started..");
        // Kilit mekanızması ihtiyaç dahilinde kullanılmalıdır.
        // Bu örnekte ihtiyaç yoktur.
        //synchronized(this) {
         for (Integer i : v) {
           sum += i;
         }
         System.out.println(Thread.currentThread().getName() + " => The sum: " + sum);
        //}
    }
    public Integer getSum() {
        return sum;
    }
}
Enter fullscreen mode Exit fullscreen mode
package com.app.thread;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main{
    public static void main(String[] args) {
        List<Integer> v = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8));
        List<ThreadExample> allThreads = new ArrayList<>();

        int threadCount = 3; int totalSum = 0; int startIndex = 0;
        // Her bir thread ne kadarlık iş yapacak.
        int perCountOfThread = v.size() / threadCount + ((v.size() % threadCount == 0) ? 0 : 1);

        // Belirlenen dinamik thread sayısı kadar thread başlatılıyor.
        for(int i=1; i<=threadCount; i++) {
            int lastIndex = Math.min((startIndex + perCountOfThread), v.size());
            ThreadExample thread = new ThreadExample(v.subList(startIndex, lastIndex));
            thread.start();
            // Başlatılan tüm threadleri bir listeye alıyoruz.
            allThreads.add(thread);
            startIndex = startIndex+perCountOfThread;
        }

        // İşini bitiren threadleri bir listeye alınıyor.
        // Sonuçlar ana thread tarafından toplanıyor.
        List<String> completedThread = new ArrayList<>();
        while (completedThread.size() != threadCount) {
            for (ThreadExample tempThread : allThreads) {
                if (!tempThread.isAlive() && !completedThread.contains(tempThread.getName())) {
                    totalSum += tempThread.getSum();
                    completedThread.add(tempThread.getName());
                }
            }
        }

        System.out.println(Thread.currentThread().getName() + " => The sum: " + totalSum);
    }
}

Enter fullscreen mode Exit fullscreen mode

Program Çıktısı
Image description

Not: Thread.join(), iş parçacığının tamamen bitmesini beklerken, iki iş parçacığının aynı anda aynı kod parçasını yürütmesini önlemek için synchronized bir blok kullanılabilir.

Örnek Uygulama 2

package com.app.thread;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main{
    public static void main(String[] args){
        List<Integer> v = new ArrayList<>(Arrays.asList(1, 2, 3,4));

        ThreadExample thread1 = new ThreadExample(v);
        ThreadExample thread2 = new ThreadExample(v);

        try {
            thread1.start();
            thread1.join(); // thread2 çalışabilmek için bekleyecektir.
            thread2.start();
            thread2.join(); // main thread çalışabilmek için bekleyecektir.
           // start yerine run kullanılırsa, 
           // main thread 2 numaralı thread'i beklemeyecek 
           // böylece thread2.join() satırına ihtiyaç duyulmayacaktır. 
        }catch (InterruptedException e) {
            System.out.println(e.getMessage());
        }

        Integer totalSum = thread1.getSum() + thread2.getSum();
        System.out.println(Thread.currentThread().getName() + " => The sum: " + totalSum);
    }
}
Enter fullscreen mode Exit fullscreen mode

Program Çıktısı
Image description

thread Article's
30 articles in total
Favicon
This Small Python Script Improved Understanding of Low-Level Programming
Favicon
How to Run an Asynchronous Task in Spring WebFlux Without Blocking the Main Response?
Favicon
Quem comeu o meu CompletableFuture?
Favicon
Concurrency and Parallelism in PHP
Favicon
Thread fundamentals in Java
Favicon
Node Boost: Clusters & Threads
Favicon
Executando processos paralelos com Flutter/DART
Favicon
Multithreading - Dining Philosophers Problem in Java
Favicon
Multi-Threaded Programs in Python Using threading Module
Favicon
newSingleThreadContext() causes outofmemoryexeception in my service on Android
Favicon
A Battle of Words: Twitter vs Threads App
Favicon
Make Ruby code thread-safe
Favicon
Process and Thread
Favicon
Asynchronous Daily Thread Automation
Favicon
How Home Assistant found my Thread Thermostats
Favicon
Web Worker, Service Worker, and Worklets: A Comprehensive Guide
Favicon
O que é processo e um thread?
Favicon
The experiment of SPVM::Thread is started today.
Favicon
Multi-Threaded FizzBuzz
Favicon
Tweet YouTube video with Google Chrome Extension
Favicon
Internals of goroutines and Channels
Favicon
Thread Synchronization within Linux Operating System.
Favicon
Java Thread Sınıfı
Favicon
Why do we need threads along with processes?
Favicon
Java Thread Programming (Part 1)
Favicon
Notes on Thread and threading module in python
Favicon
Java Thread Programming: Lesson 3
Favicon
Java Thread Programming: Lesson 1
Favicon
Java Thread Programming: Lesson 2
Favicon
How to create a new Thread in java ?

Featured ones: