آشنایی با مفهوم Multi Threading در زبان برنامه نویسی جاوا | هستی پروژه

آشنایی با مفهوم Multi Threading در زبان برنامه نویسی جاوا – قسمت دوم

با ادامه ی بحث Multi Threading درخدمت شما کاربران عزیز و گرامی هستیم .در این قسمت به معرفی چند بخش دیگر مورد استفاده در چند نخی , runnable و طریقه ی اجرای آن با استفاده از executor service می پردازیم.

 

Runnable یک اینترفیس است وکلاسی که از آن استفاده می کند باید حتما از Runnable پیاده سازی شود (implements شود). برای sleep کردن یک Thread آن را با دستور (thread.sleep(sleeptime ایجاد می کنیم و همچنین باید از یک exception برای مواجهه با استثناهای احتمالی بهره ببریم.برای اجرای Runnableها از کلاس executor service استفاده می کنیم و سپس از آن یک شی می سازیم و در آن با استفاده از دستور زیر آن را درون یک thread pool قرار می دهیم :

 

ExecutorService threadexecutor = Executor.newcatchedthreadpool();

و سپس :

threadexecutor.execute(task1);

و در نهایت آن نخ را خاتمه می دهیم:

threadexecutor.shutdown();

Thread Syncronization : وقتی که ما می خواهیم در نخ ها هر نخ به صورت جداگانه و فقط در یک زمان به داده های اشتراکی دسترسی داشته باشد و نخ های بعدی باید منتظر بمانند که به این عمل Mutual Exclusion نیز می گویند.در حقیقت با این روش با اضافه کرد شی مانیتور و lock کردن هر بخش کد درون ناحیه ی synchronized از استفاده ی همزمان چند نخ از داده های اشتراکی جلوگیری می کنیم . باید توجه داشته باشیم در صورتی که از این قابلیت استفاده نکنیم unsafe هست و با error مواجه می شویم.

syncronized(object)

همچنین اتمیک بودن به این معناست که مثلا یک متغیر در داده های اشتراکی توسط یک نخ مورد استفاده قرار می گیرد.

در ادامه کد بخشی از ایجاد thread را می بینید:

 


package hastiproject.com;
// printTask class sleeps for a random time from 0 to 5 seconds

import java.util.Random;
public class PrintTask implements Runnable
 {
     private final int sleepTime; // random sleep time for thread
     private final String taskName; // name of task
     private final static Random generator = new Random();
     // constructor
     public PrintTask( String name )
     {
     taskName = name; // set task name
     // pick random sleep time between 0 and 5 seconds
     sleepTime = generator.nextInt( 5000 ); // milliseconds
   } // end PrintTask constructor
     // method run contains the code that a thread will execute
     public void Run()
     {
         try // put thread to sleep for sleepTime amount of time
         {
         System.out.printf( "%s going to sleep for %d milliseconds.\n",
         taskName, sleepTime );
         Thread.sleep(sleepTime);//put thread to sleep
         } // end try
         catch ( InterruptedException exception )
         {
             System.out.printf( "%s %s\n", taskName,
             "terminated prematurely due to interruption" );
             } // end catch        
         // print task name
         System.out.printf( "%s done sleeping\n", taskName );        
     } // end method run 
         } // end class PrintTask 

دیدگاه خود را به ما بگویید.