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

ฟรี TUTORIAL JAVA

ฟรีtutorial JAVA 01 install Eclipse ฟรีtutorial JAVA 02 intro to programming Eclipse ฟรีtutorial JAVA 03 condiotion ฟรีtutorial JAVA 04.loop ฟรีtutorial JAVA 05.array ฟรีtutorial JAVA 05 2 array cont ฟรีtutorial JAVA 06 01 function ฟรีtutorial JAVA 06 02 function cont ฟรีtutorial JAVA 07 object ฟรีtutorial JAVA 08 string ฟรีtutorial JAVA 09 constructor ฟรีtutorial JAVA 10 01 oop ฟรีtutorial JAVA 10 02 oop2 ฟรีtutorial JAVA 11 exception ฟรีtutorial JAVA 12 reading file ฟรีtutorial JAVA 13 thread ฟรีtutorial JAVA 14 generic ฟรีtutorial JAVA 15 01 GUI ฟรีtutorial JAVA 15 02 GUI2 ฟรีtutorial JAVA 15 03.GUI3 ฟรีtutorial JAVA 16 using WindowBuilder ฟรีtutorial JAVA 17 event ฟรีtutorial JAVA 18 database management system ฟรีtutorial JAVA 19 ER diagram ฟรีtutorial JAVA 20 Relational ฟรีtutorial JAVA 21 Xampp ฟรีtutorial JAVA 22 JDBC ฟรีtutorial JAVA 23 MVC ฟรีtutorial JAVA 24 SQL ฟรีtutorial JAVA
ขอย้ำอีกครั้งว่าเนื้อหาที่เห็นอยู่นี้ไม่ใช่เนื้อหาตามปกติที่เราสอนในห้องเรียนเป็นแค่ tutorial ไว้อ่านประกอบเฉยๆ แทบไม่เกี่ยวกันเลย และไม่เกี่ยวกับการบ้านที่ทำครับ ในห้องเรียนเนื้อหาจะเยอะกว่านี้ค่อนข้างมากครับ
ขอบคุณน้องตี้ อย่างสูงสำหรับ Tutorial ดีๆ

ฟรี TUTORIAL DATA STRUCTURE

DATA STRUCTURE

ฟรีtutorial : DATA STRUCTURE : 01 1การเรียงลำดับ(Sorting) ฟรีtutorial : DATA STRUCTURE : 01 2 การเรียงลำดับ2 ฟรีtutorial : DATA STRUCTURE : 02 อาร์เรย์ลิสต์ (Array List) ฟรีtutorial : DATA STRUCTURE : 03 ลิงค์ลิสต์ (Linked List) ฟรีtutorial : DATA STRUCTURE : 04 สแต๊ค ฟรีtutorial : DATA STRUCTURE : 05 1 คิวและไพออริตี้คิว ฟรีtutorial : DATA STRUCTURE : 05 2 คิวและไพออริตี้คิว ฟรีtutorial : DATA STRUCTURE : 06 1 ไบนารีทรี ฟรีtutorial : DATA STRUCTURE : 06 2 ไบนารีเสิร์ชทรี ฟรีtutorial : DATA STRUCTURE : 06 3 ไบนารีเสิร์ชทรี ฟรีtutorial : DATA STRUCTURE : 08 แฮช ฟรีtutorial : DATA STRUCTURE : 09 กราฟ ฟรีtutorial : DATA STRUCTURE :
ขอย้ำอีกครั้งว่าเนื้อหาที่เห็นอยู่นี้ไม่ใช่เนื้อหาตามปกติที่เราสอนในห้องเรียนเป็นแค่ tutorial ไว้อ่านประกอบเฉยๆ แทบไม่เกี่ยวกันเลย และไม่เกี่ยวกับการบ้านที่ทำครับ ในห้องเรียนเนื้อหาจะเยอะกว่านี้ค่อนข้างมากครับ
ขอบคุณน้องตี้ อย่างสูงสำหรับ Tutorial ดีๆ

                                                                   

เธรด(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()



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