
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
آموزش فشرده ساز پاسخ (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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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(); } } } <button></button> |
فایل: JavaThreadPoolExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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" ); } } <button></button> |
خروجی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 <button></button> |