کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش فشرده ساز پاسخ (Response Compression) در Asp.Net MVC Core

آموزش Java – Thread Pool در پردازش موازی در Java

thread pool عبارت است مجموعه ای از worker thread ها که منتظر انجام عملیات بوده و بارها قابل استفاده می باشند. در واقع thread pool یک مخزن است از thread های آماده است که با استفاده از آن دیگر نیازی نیست هر بار خود توسعه دهنده یک thread جدید ایجاد کند بلکه از thread pool می خواهد که برای اجرای عملیات مورد نظر یک thread در اختیار او قرار دهد.

در thread pool تعدادی thread با حجم یکسان ایجاد می شود که عمومی بوده و قادر به انجام هر عملیاتی می باشند. زمانی که عملیات (job) خاصی برای انجام به وجود می آید، service provider یک thread از thread pool یا مخزن thread های آماده بیرون کشیده و عملیات مورد نظر را به آن thread محول می نماید. پس از اینکه عملیات مورد نظر خاتمه یافت، thread مذکور بار دیگر به thread pool بازمی گردد.

مزیت استفاده از Thread Pool

کارایی بالاتر را به دنبال دارد چرا که توسعه دهنده مجبور نیست برای انجام هر عملیاتی که به وجود می آید (در صف قرار می گیرد) یک thread جدید ایجاد نماید.

JSP و Servlet برای پردازش request ها، در container یک thread pool ایجاد می کنند.

مثال کاربردی از Thread Pool در Java

جاوا برای اجرای thread ها در thread pool یک interface به نام Executors و جهت مدیریت thread ها، interface دیگری به نام ExecutorService را ارائه می دهد. در مثال زیر برای پیاده سازی thread pool و مدیریت thread ها از این دو interface استفاده شده است:

فایل: WorkerThread.java

import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
class WorkerThread implements Runnable {  
private String message;  
public WorkerThread(String s){  
this.message=s;  
}  
public void run() {  
System.out.println(Thread.currentThread().getName()+" (Start) message = "+message);  
processmessage();//call processmessage method that sleeps the thread for 2 seconds  
System.out.println(Thread.currentThread().getName()+" (End)");//prints thread name  
}  
private void processmessage() {  
try {  Thread.sleep(2000);  } catch (InterruptedException e) { e.printStackTrace(); }  
}  
}  

فایل: JavaThreadPoolExample.java

public class TestThreadPool {  
public static void main(String[] args) {  
ExecutorService executor = Executors.newFixedThreadPool(5);//creating a pool of 5 threads  
for (int i = 0; i < 10; i++) {  
Runnable worker = new WorkerThread("" + i);  
executor.execute(worker);//calling execute method of ExecutorService  
}  
executor.shutdown();  
while (!executor.isTerminated()) {   }  
System.out.println("Finished all threads");  
}  
}  

خروجی:

pool-1-thread-1 (Start) message = 0
pool-1-thread-2 (Start) message = 1
pool-1-thread-3 (Start) message = 2
pool-1-thread-5 (Start) message = 4
pool-1-thread-4 (Start) message = 3
pool-1-thread-2 (End)
pool-1-thread-2 (Start) message = 5
pool-1-thread-1 (End)
pool-1-thread-1 (Start) message = 6
pool-1-thread-3 (End)
pool-1-thread-3 (Start) message = 7
pool-1-thread-4 (End)
pool-1-thread-4 (Start) message = 8
pool-1-thread-5 (End)
pool-1-thread-5 (Start) message = 9
pool-1-thread-2 (End)
pool-1-thread-1 (End)
pool-1-thread-4 (End)
pool-1-thread-3 (End)
pool-1-thread-5 (End)
Finished all threads
1396/08/10 3133 1968
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...