در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها

با سلام به همه دوستان و همراهان عزیز itpro. در مطلب قبل درباره ی multi-threading یا چندنخی در جاوا صحبت کردیم و گفتیم که با استفاده از اینترفیس Runnable می توان از این قابلیت استفاده کرد. در این مطلب قصد داریم که راه دیگری را برای استفاده از قابلیت تردها در زبان جاوا را بیان کنیم. این روش استفاده از کلاس Thread است. استفاده از این روش به این شکل است که باید یک کلاس بسازیم و کلاسی که ساخته ایم فرزند کلاس Thread باشد.(کلاس Thread را extends کرده باشد). این روش قابلیت های بیشتر و انعطاف بیشتری به برنامه نویسان می دهد. استفاده از این روش دارای مراحل زیر است:

  • مرحله 1 در این مرحله شما باید متد run را از کلاس Thread بازنویسی (override) کنید. این متد نقطه ورود و شروع ترد است و شما باید کد اجرایی خود را در این متد قرار دهید. این متد به شکل زیر است:
  • public void run( )
    
    
  • مرحله 2 اجرا کردن ترد مورد نظر از داخل متد start مربوط به کلاس Thread می باشد. از داخل این متد thread مورد نظر را استارت می زنیم که متد run اجرا شود. این متد به شکل زیر است:
  • void start( );
    
    

برای درک بهتر استفاده از کلاس Thread یک مثال در ادامه آورده ایم که به آن توجه کنید. دقت کنید که این مثال شبیه به همان مثالی است که برای پیاده سازی با runnable آورده بودیم:

class ThreadDemo extends Thread {
   private Thread t;
   private String threadName;
   
   ThreadDemo( String name){
       threadName = name;
       System.out.println("Creating " +  threadName );
   }
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
     } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
     }
     System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start ()
   {
      System.out.println("Starting " +  threadName );
      if (t == null)
      {
         t = new Thread (this, threadName);
         t.start ();
      }
   }

}

public class TestThread {
   public static void main(String args[]) {
   
      ThreadDemo T1 = new ThreadDemo( "Thread-1");
      T1.start();
      
      ThreadDemo T2 = new ThreadDemo( "Thread-2");
      T2.start();
   }   
}

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

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

در کلاس Thread متدهایی وجود دارد که به ما امکانات بیشتری برای کار با ترد ها و مدیریت آنها می دهد. ما به معرفی چند تا از این متدها می پردازیم.

  • متدsetName این متد برای ترد اجرایی یک نام را مشخص می کند مانند همان هایی که در مثال قبل دیدید.
  • متد setPriority این متد برای تعیین اولویت ترد می باشد. که یک عدد از 1 تا 10 را می توانید به این متد بدهید و دقت داشته باشید که عدد بیشتر به معنای اولیت بالا تر است.
  • متد setDaemon این متد یک مقدار منطقی دریافت می کند که اگر true باشد حالت روح را برای ترد فعال می کند. حالت روح حالتی است که اگر برنامه اصلی تمام شود ولی تردی که در حالت روح است به اجرای خود ادامه می دهد.
  • متد join این متد برای این منظور به کار برده می شود که به ترد اصلی می گوید که صبر کند تا کار ترد مورد نظر به اتمام برسد و آن ترد از حرکت بایستد.
  • متد sleep این متد یک زمان میگیرد و ترد را به اندازه همان زمان به خواب می برد و آن را متوقف می کند.
  • متد currentThread این متد یک اشاره گر به تردی دارد که در داخل آن هستیم.

برای این که با این متد ها بهتر آشنا شویم برنامه ای نوشته ایم که از چند کلاس تشکیل شده است. دقت کنید که نام کلاس ها و نام فایل های آن ها را به صورت توضیحات مشخص کرده ایم. در این برنامه از هر دو روش استفاده از تردها استفاده کرده ایم. تردی که با استفاده از اینترفیس Runnable ساخته شده است:

// File Name : DisplayMessage.java
// Create a thread to implement Runnable
public class DisplayMessage implements Runnable
{
   private String message;
   public DisplayMessage(String message)
   {
      this.message = message;
   }
   public void run()
   {
      while(true)
      {
         System.out.println(message);
      }
   }
}

تردی که با استفاده از کلاس Thraed ساخته شده است:

// File Name : GuessANumber.java
// Create a thread to extentd Thread
public class GuessANumber extends Thread
{
   private int number;
   public GuessANumber(int number)
   {
      this.number = number;
   }
   public void run()
   {
      int counter = 0;
      int guess = 0;
      do
      {
          guess = (int) (Math.random() * 100 + 1);
          System.out.println(this.getName()
                       + " guesses " + guess);
          counter++;
      }while(guess != number);
      System.out.println("** Correct! " + this.getName()
                       + " in " + counter + " guesses.**");
   }
}

متد main که از تردهای تعریف شده استفاده می کند:

// File Name : ThreadClassDemo.java
public class ThreadClassDemo
{
   public static void main(String [] args)
   {
      Runnable hello = new DisplayMessage("Hello");
      Thread thread1 = new Thread(hello);
      thread1.setDaemon(true);
      thread1.setName("hello");
      System.out.println("Starting hello thread...");
      thread1.start();
      
      Runnable bye = new DisplayMessage("Goodbye");
      Thread thread2 = new Thread(bye);
      thread2.setPriority(Thread.MIN_PRIORITY);
      thread2.setDaemon(true);
      System.out.println("Starting goodbye thread...");
      thread2.start();

      System.out.println("Starting thread3...");
      Thread thread3 = new GuessANumber(27);
      thread3.start();
      try
      {
         thread3.join();
      }catch(InterruptedException e)
      {
         System.out.println("Thread interrupted.");
      }
      System.out.println("Starting thread4...");
      Thread thread4 = new GuessANumber(75);
      
	  thread4.start();
      System.out.println("main() is ending...");
   }
}

اگر برنامه بالا را اجرا کنید خروجی به شکل زیر خواهد بود:

Starting hello thread...
Starting goodbye thread...
Hello
Hello
Hello
Hello
Hello
Hello
Goodbye
Goodbye
Goodbye
Goodbye
Goodbye
.......

البته ممکن است که هربار یک نتیجه متفاوت با نتیجه ای که نمایش دادیم تولید شود. Itpro باشید

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#multithreading_چیست #برنامه_نویسی_جاوا #آموزش_برنامه_نویسی_جاوا #آموزش_جاوا #کار_با_تردها_در_جاوا #آموزش_گام_به_گام_جاوا #متوقف_کردن_ترد #چند_نخی_در_جاوا #کلاس_thread_در_جاوا #دوره_آموزشی_جاوا
عنوان
1 آموزش جاوا (Java) قسمت 1 : معرفی ، خصوصیات و شروع به کار رایگان
2 آموزش جاوا (Java) قسمت 2 : شی گرایی قسمت یک رایگان
3 آموزش جاوا (Java) قسمت 3: شی گرایی قسمت دو رایگان
4 آموزش جاوا (Java) قسمت 4 : شی گرایی قسمت سه رایگان
5 آموزش جاوا (Java) قسمت 5 : انواع داده رایگان
6 آموزش جاوا (Java) قسمت 6 : انواع متغیر رایگان
7 آموزش جاوا (Java) قسمت 7 : Modifier ها رایگان
8 آموزش جاوا (Java) قسمت 8 : عملگرها قسمت یک رایگان
9 آموزش جاوا (Java) قسمت 9 : عملگرها قسمت دو رایگان
10 آموزش جاوا (Java) قسمت 10 : حلقه های تکرار رایگان
11 آموزش جاوا (Java) قسمت 11 : عبارات شرطی رایگان
12 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
13 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
14 آموزش جاوا (Java) قسمت 14: کلاس Wrapper کاراکترها رایگان
15 آموزش جاوا (Java) قسمت 15 : کلاس String و کار با رشته قسمت یک رایگان
16 آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو رایگان
17 آموزش جاوا (Java) قسمت 17 : کلاس String و کار با رشته قسمت سه رایگان
18 آموزش جاوا (Java) قسمت 18 : کلاس String و کار با رشته قسمت چهار رایگان
19 آموزش جاوا (Java) قسمت 19 : StringBuilder و StringBuffer رایگان
20 آموزش جاوا (Java) قسمت 20 : استفاده از آرایه ها رایگان
21 آموزش جاوا (Java) قسمت 21 : آموزش کار با تاریخ رایگان
22 آموزش جاوا (Java) قسمت 22 : عبارات منظم (Regular Expression) رایگان
23 آموزش جاوا (Java) قسمت 23 : تعریف و استفاده از متدها قسمت یک رایگان
24 آموزش جاوا (Java) قسمت 24 : تعریف و استفاده از متدها قسمت دو رایگان
25 آموزش جاوا (Java) قسمت 25 : کار با استریم ها و فایل ها رایگان
26 آموزش جاوا (Java) قسمت 26 : کار با دایرکتوری ها رایگان
27 آموزش جاوا (Java) قسمت 27 : کلاس ByteArrayInputStream رایگان
28 آموزش جاوا (Java) قسمت 28 : معرفی کلاس File و متدها رایگان
29 آموزش جاوا (Java) قسمت 29 : معرفی و شرح Exception ها قسمت 1 رایگان
30 آموزش جاوا (Java) قسمت 30 : معرفی و شرح Exception ها قسمت 2 رایگان
31 آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3 رایگان
32 آموزش جاوا (Java) قسمت 32 : استفاده از انوع کلاس های داخلی رایگان
33 آموزش جاوا (Java) قسمت 33 : وراثت کلاس ها و انواع آن رایگان
34 آموزش جاوا (Java) قسمت 34 : Override کردن متد ها رایگان
35 آموزش جاوا (Java) قسمت 35 : چند ریختی (Polymorphism) رایگان
36 آموزش جاوا (Java) قسمت 36 : Enum و ویژگی های آن رایگان
37 آموزش جاوا (Java) قسمت 37 : معرفی Abstract رایگان
38 آموزش جاوا (Java) قسمت 38 : استفاده از کپسول بندی (Encapsulation) رایگان
39 آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها رایگان
40 آموزش جاوا (Java) قسمت 40 : پکیج(Package) و نحوه استفاده رایگان
41 آموزش جاوا (Java) قسمت 41 : معرفی داده ساختارها Enumeration رایگان
42 آموزش جاوا (Java) قسمت 42 : داده ساختار BitSet رایگان
43 آموزش جاوا (Java) قسمت 43 : داده ساختار Vector رایگان
44 آموزش جاوا (Java) قسمت 44 : داده ساختار Stack (پشته) رایگان
45 آموزش جاوا (Java) قسمت 45 : داده ساختار Dictionary رایگان
46 آموزش جاوا (Java) قسمت 46 : داده ساختار Hashtable رایگان
47 آموزش جاوا (Java) قسمت 47 : داده ساختار Properites رایگان
48 آموزش جاوا (Java) قسمت 48 : معرفی و آموزش جنریک (Generic) رایگان
49 آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1 رایگان
50 آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2 رایگان
51 آموزش جاوا (Java) قسمت 51 : استفاده از Lambda Expression رایگان
52 آموزش جاوا (Java) قسمت 52 : Thread و Multi-Threading رایگان
53 آموزش جاوا (Java) قسمت 53 : Runnable در Thread و Multi-Threading رایگان
54 آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....