# Thread Pool (Executors) Kavramı

## 👀 Thread Pool Nasıl Çalışır

* 🚄 Yapılacak işler **Task Queue** içerisinde sıraya alınır
* 🦄 Her iş, **tek tek** oluşturulan **Thread Pool** üzerindeki boş bulunan *thread* üzerinde tamamlanır
* 💦 Tamamlanan işlerden sonra *thread* serbest bırakılır, **Task Queue** üzerinden yeni iş alınır

![](https://2136337814-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3IVBqG9Jn8K2viWOpgUm%2Fuploads%2Fgit-blob-3a0022c41802b00bca5c38ddc6d39ac012698f65%2Fthread_pool.png?alt=media)

## ⭐ Thread Pool Türleri

| 💎 Tür              | 📝 Açıklama                                                                        | 🤔 Ne zaman tercih edilmeli                                                               |
| ------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| ⚡ Fixed             | Sabit sayıda *thread* ile havuz oluşturulur, boşta *thread* yoksa işler bekletilir | Genellikle tercih edilen en iyi durumdur                                                  |
| 🤹‍♂️ Cached        | Lazım oldukça *thread* oluşturulur,                                                | Uzun süreli işlemlerde kullanılmaz, sistemin kaldıramayacağı kadar thread oluşturulabilir |
| 🕐 Scheduled        | Belirli aralıklarla işleri sırayla yapan *thread* yapısı                           | Periyodik olarak yapılacak işler                                                          |
| 🦄 Single           | Tüm işler için tek bir *thread* yapısı oluşturulur.                                | Tek bir iş için tercih edilir                                                             |
| 🧛‍♂️ Work Stealing | İş için gerekli sayıda thread oluşturur                                            | Çoklu işlem gücü olan makinelerde, *paralelizm* için kullanılır                           |

## 👨‍💼 Executor Yönetimi

| 💠 Metot                                      | 📝 Açıklama                                                                                                            |
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `shutdownNow()`                               | Executor'u direkt olarak sonlandırır, verilen görevleri çalıştırmaz, olan görevler tamamlanır ama metotlar tamamlanmaz |
| `isTerminated()`                              | Kapatma sinyali aldığında ve *executor* işini bitirdiği zaman `true` verir                                             |
| `isShutdown()`                                | Kapatma sinyali aldığında `true` verir                                                                                 |
| `awaitTermination(long timeout,TimeUnitunit)` | Thread'i executor görevini tamamlayıncaya kadar yada verilen süre kadar bloklar                                        |

## 🔗 Faydalı Kaynaklar

{% embed url="<https://howtodoinjava.com/java/multi-threading/java-thread-pool-executor-example/>" %}
