แสดงบทความที่มีป้ายกำกับ Lock thread แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Lock thread แสดงบทความทั้งหมด

วันศุกร์ที่ 14 มกราคม พ.ศ. 2554

การทำให้ Instance lock พร้อมให้ thread แต่ล่ะตัวทำงานเสร็จก่อน ตัวถัดไปถึงจะทำงานได้

การทำให้ Instance lock พร้อมให้ thread แต่ล่ะตัวทำงานเสร็จก่อน ตัวถัดไปถึงจะทำงานได้
1.ทำงานได้หลาย Thread

public class TestClassUnSyn extends Thread {

      public TestClassUnSyn(String s) {
            super(s);
      }

      public synchronized void run() {
            String t = Thread.currentThread().getName();
            System.out.println(t + " : " + "enter f()");
            try {
                  Thread.sleep(1000);
            } catch (InterruptedException e) {
                  //
            }
            System.out.println(t + " : " + "leaving f()");
      }

      public static void main(String[] args) throws Exception {
            String[] nameThread = { "A", "B", "C", "D", "E" };
            for (int i = 0; i < 5; i++) {
                  new TestClassUnSyn(nameThread[i]).start();
            }
      }
}
*** output ****
A : enter f()
B : enter f()
C : enter f()
D : enter f()
E : enter f()
C : leaving f()
B : leaving f()
A : leaving f()
E : leaving f()
D : leaving f()

2.ทำงานได้ทีละ Thread
public class TestClassSyn extends Thread {
      public TestClassSyn(String s) {
            super(s);
      }

      public void run() {
            synchronized (TestClassSyn.class) {
                  String t = Thread.currentThread().getName();
                  System.out.println(t + " : " + "enter f()");
                  try {
                        Thread.sleep(1000);
                  } catch (InterruptedException e) {
                        //
                  }
                  System.out.println(t + " : " + "leaving f()");
            }
      }
     

      public static void main(String[] args) throws Exception {
            String[] nameThread = { "A", "B", "C", "D", "E" };
            for (int i = 0; i < 5; i++) {
                  new TestClassSyn(nameThread[i]).start();
            }
      }
}

**** output  ****
A : enter f()
A : leaving f()
E : enter f()
E : leaving f()
D : enter f()
D : leaving f()
C : enter f()
C : leaving f()
B : enter f()
B : leaving f()