สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial JAVA

01 install Eclipse 02 intro to programming Eclipse 03 condition 04.loop 05.array 05 2 array cont 06 01 function 06 02 function cont 07 object 08 string 09 constructor 10 01 oop 10 02 oop2 11 exception 12 reading file 13 thread 14 generic 15 01 GUI 15 02 GUI2 15 03.GUI3 16 using WindowBuilder 17 event 18 database management system 19 ER diagram 20 Relational 21 Xampp 22 JDBC 23 MVC 24 SQL

เธรด (Thread)

            เธรดคือระบบของจาวาสำหรับการสนับสนุนการทำงานแบบ multi-tasking แบบที่ในระบบปฏิบัติการก็จะให้โปรแกรมสามารถทำงานพร้อมกันได้ เช่น ฟังเพลงไปด้วยพิมพ์งานไปด้วยก็ได้ นอกจากนี้เธรดยังสามารถทำงานพร้อมกันได้ด้วยเรียกว่า multi-thread

เธรด

            เธรดเป็นการทำงานหลายงานพร้อมกันก็จริงแต่สำหรับเธรดนั้นจะไม่ได้ใช้พื้นที่เยอะเหมือนโปรเซส(processes)เนื่องมาจากว่าเธรด มี stack, program counter และ local variable ที่เป็นของตัวเอง แต่ใช้ทรัพยากรอื่นร่วมกันกับเธรดตัวอื่นที่มีอยู่ในโปรเซสเดียวกัน เช่น memory, file handlers และ pre‐process state อื่น ๆ ก็เลยเรียกโปรเซสว่า “heavyweight process” และเรียกเธรดว่าเป็น “lightweight process” เธรดเป็นเพียงหน่วยการทำงานของโปรแกรม

สาเหตุหลักที่ต้องมีเธรด ในโปรแกรมก็เพราะต้องการให้การแสดงผลเป็นไปได้อย่างรวดเร็ว เช่นถ้ามีโปรแกรมที่ใช้เวลาในการประมวลผลใน CPU มาก ๆ ก็จะทำให้การสนองตอบจะช้าลง การนำเอาเธรดเข้ามาช่วยจะเหมือนกับว่าสามารถทำงานสองอย่างในเวลาเดียวกัน แต่ที่จริงแล้ว ระบบทำการสลับการใช้ CPU ระหว่างโปรแกรมต่าง ๆ เมื่อสิ้นสุดก็กลับมาทำงานเดิมต่อ  

ชีวิตของเธรด

 


รูป13-1

1.      เริ่มต้นชีวิตด้วยคีย์เวิร์ด new

2.      ใช้คำสั่ง start ให้เธรดเริ่มทำงาน โดยเธรดจะทำตามสิ่งที่อยู่ในเมท็อด run ต้อง override เมท็อดนี้

3.      Time waiting คือบางครั้งทำงานอยู่ก็สามารถให้เธรดหยุดการทำงานชั่วคราวได้ โดยใช้เมท็อด sleep หรือ เมท็อด wait

4.      เธรดกลับมาทำงานเหมือนเดิมจากการตื่นจาก sleep หรือ ไม่ก็ถูกปลุกด้วย notify

5.      Terminated คือการหยุดทำงานเมื่อจบคำสั่งจาก run

ประเภทของเธรด

            ประเภทของเธรดมี 2 แบบ

1.แบบ extends Thread

            public void run( ){ }

2. แบบ implements Runnable

            public void run( ){ }

            ไม่ว่าจะ extends หรือ implements มาก็ต้องทำการ override เมท็อด run แล้วจะรู้ได้ยังไงว่าจะต้อง extends หรือ implements – ก็แล้วแต่ว่าคลาสนั้นไป extends อะไรมาก่อนหรือเปล่า เพราะจาวาไม่ให้ extends คลาสหลายๆคลาสพร้อมกันได้(multi-inheritance) ถ้าไป extends อะไรมาแล้วก็ implements เอา

            ตัวอย่างเธรด

 


รูป13-2

บรรทัดที่ 3 : สร้างคลาส TestThread โดยให้ extends Thread มา ถ้าจะใช้อินเทอร์เฟซก็เปลี่ยนเป็น  

            implements มาแทน

บรรทัดที่ 5 : override เมท็อด run ข้างหน้าเลข 5 จะมีรูปสามเหลี่ยมสีเขียวบอกว่าทำการ override เมท็อด

            run จากคลาส Thread

บรรทัดที่ 14 : สร้างอ็อปเจ็คของ TestThread ขึ้นมาและให้ตัวแปรนี้เรียก start();

บรรทัดที่ 15 : เรียก start();

ผลลัพธ์ที่ได้

 


รูป13-3

 

Multi-thread

            เป็นการทำงานของเธรดหลายตัวพร้อมกันโดยการทำงานของเธรดจะเป็นอิสระต่อกัน สามารถใช้multi-thread ด้วยสิ่งที่เรียกว่า anonymous inner class ก็คือคลาสย่อยในคลาสอีกคลาสหนึ่ง

 


รูป 13-4

บรรทัดที่ 5 : new Thread ขึ้นมาแต่จะสังเกตว่ามีการ new Runable ขึ้นมาเป็น anonymous inner class ด้วย

ภายใน Runable ก็ทำการ implements เมท็อด run

บรรทัดที่ 8 : หน้าเลข 8 จะมีสามเหลี่ยมสีขาวเพื่อแสดงการ implements เมท็อดจากคลาส Runable

บรรทัดที่ 11 : ระบุเวลาสำหรับหยุดการทำงานของเธรด หน่วยเป็น millisecond

บรรทัดที่ 13 : แสดงตัวอักษร x ออกจากหน้าจอ

บรรทัดที่ 18 : ให้เธรดแรกเริ่มการทำงาน

บรรทัดที่ 20 : new Thread ขึ้นมาและ new Runable ขึ้นมาเป็น anonymous inner class

บรรทัดที่ 24 : เปลี่ยนเวลาสำหรับหยุดการทำงานเหลือแค่ 50 millisecond

บรรทัดที่ 26 : แสดงตัวอักษร y

ผลลัพธ์

 


รูป13-5

            จะเห็นว่า y จะแสดงออกทางหน้าจอมากกว่า x เพราะเวลาสำหรับหยุดการทำงานของ y นั้นน้อยกว่า x และทุกๆ 2 บรรทัด x และ y จะแสดงออกทางหน้าจอพร้อมกันอยู่บรรทัดเดียวกันก็เพราะว่าเธรดทำงานเป้นอิสระต่อกันจึงสามารถแสดงผลออกมาพร้อมกันได้

เมท็อดในเธรด

            เมท็อด sleep

static void sleep(long millis)

            เมท็อดนี้เธรดจะหยุดทำงานจนครบกำหนดเวลาก็จะคืนค่าออกมาเหมือนเดิม

 

            เมท็อด join

void join (long millis)

                        ถ้าใช้ join กับเธรดตัวไหน เธรดตัวนั้นจะทำงานครบตาม run ก่อนเธรดอื่นถึงจะทำงาน

            เมท็อด wait

void wait()

                        เธรดจะหยุดการทำงานจนกว่า จะมีการเรียกเมท็อด void notify()



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา