Basic Thread in Java

Supawit R
odds.team
Published in
1 min readMay 9, 2022
Thread | https://unsplash.com/photos/Nh6NsnqYVsI

ในการทำงาน ถ้าเรารู้สึกว่างานไหนอาจจะทำคนเดียวไม่เสร็จ เราก็จะแบ่งงานไปให้คนอื่นช่วยทำ และสามารถทำงานนั้น ๆ ในเวลาเดียวกันได้ใช่ไหมครับ การเขียนโปรแกรมก็เช่นกันเราเรียกสิ่งนี้ว่า concurrent programming

ในโลกความจริงเราก็อาจจะใช้หน่วยการทำงานในเวลานึงเป็น “คน” ใช่ไหมครับ ส่วนโลกของ Java จะมีหน่วยของการทำงานอยู่ 2 หน่วย คือ “process” และ “thread”

Process

แอปพลิเคชันที่รันบน Java Virtual Machine (JVM) ส่วนใหญ่แล้ว 1 application มักจะมี 1 process การทำงาน โดย process จะมี memory resource ที่ขอจาก Operating Systems (OS) มาใช้งาน

Thread

ตัว Thread มักจะถูกเรียกว่า lightweight process และตัว Thread เองจะอยู่ภายใน process อีกที ที่โดน process แบ่ง resource ออกมาเพื่อสร้าง Thread

ในทุก ๆ แอปพลิเคชันมักจะมีอย่างน้อย 1 thread ทำงานอยู่ ที่เรามักเรียกว่า main Thread

Thread in Java

ในการเขียนแบบ concurrent programming ตัว Thread เองมีความสำคัญมากในการแตกหน่วยย่อย ๆ ออกเพื่อให้สามารถทำได้เร็วขึ้น และรองรับการขยายตัวของระบบ ในภาษา Java ตัว class Thread ที่อยู่ภายใต้ package java.lang.Thread และตอนที่ทำงาน Thread จะ execute การทำงาน object ของ interface java.lang.Runnable

Runnable

Runnable เป็น interface ที่มี abstract method ชื่อว่า run() หากต้องการสร้าง object หรือ class เพื่อไปรันใน Thread จะต้อง implement method ตัวนี้

ในการเขียนโปรแกรมที่จะไปรันบน thread ก็มีทางเขียนอยู่ 2 แบบคือ

1. สร้าง Runnable object จากนั้นส่ง object ที่สร้างไปให้ Thread ผ่าน constructor ตามตัวอย่าง HelloRunnable

2. สร้างใช้งาน object ที่เป็น subclass ของ Thread ที่ตัว Thread เองมีการ implement Runnable ตามตัวอย่าง HelloThread

จากตัวอย่างที่เห็นทั้งคู่สามารถทำงานที่ Thread ได้ทั้งคู่ แต่การนำไปใช้งานจริง ๆ จะนิยม implement จาก Runnable มามากว่าตามตัวอย่าง HelloRunnable เนี่องจากการเหมาะกับการนำไปใช้คู่กับ high-level thread management API เช่น Executor ส่วนการเขียนแบบ HelloThread เป็นการเขียนแบบพื้นฐานให้เข้าใจการทำงาน Thread

อย่างไรก็ตามการเขียน Thread ก็ยังมีข้อจำกัดเกียวกับ resource ที่ใช้ ขึ้นอยู่กับ CPU ของเครื่องที่รันแอปพลิเคชันนั้น ๆ ว่าสามารถสร้าง Thread ขึ้นมาสูงสุดได้กี่ตัว

เราสามารถทราบจำนวน Thread ที่สามารถสร้างได้ผ่านคำสั่ง

int numOfThreads = Runtime.getRuntime().availableProcessors();

References

https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html

--

--

Supawit R
odds.team

a developer who love to learn, read, and sleep.