ขอบันทึกกันลืมหน่อยเนื่องจากสองสามอาทิตย์ที่ผ่านมาเจอไอ้นี่พอสมควร ตั้งแต่เปลี่ยนจาก library เก่าของ douglea มาเป็น java.util.concurrent เพื่อให้ใช้กับ Java 6 ได้ต้ังแต่นั้นมาก็เจอมาอีกมากมายเลย =_=
ปกติเวลาใช้ Thread ในจาวาก็จะมีคำอยู่แค่สี่-ห้าคำผุดขึ้นมา เช่น synchronized, wait, notify, Runnable, Thread หมดและ ง่ายๆ ก็ใช้แค่นี้แหละ เวลาต้องการสร้าง Thread ใหม่ก็ new Thread ขึ้นมาจะ extends หรือ implements Runnable อะไรก็ว่าไปแต่ว่า Process ของแต่ละโปรแกรมใช่ว่าจะมี Thread ได้ไม่จำกัดจำนวน หากโปรแกรมที่ทำงานไปนานๆ หรืออาจจะตลอดเวลาตั้งแต่เปิดเครื่องแล้วมีการ new Thread ขึ้นมาเรื่อยๆ รับรองได้มีบั๊กลึกลับโผล่ขึ้นมาแน่นอนที่อาจทำให้ Process ตายได้แบบไม่รู้ตัว
Executor เลยมาจัดการเรื่องนี้โดยมาจัดลำดับให้ว่าสร้าง Thread ยังไง แล้วพอทำงานเสร็จแล้วใช่ว่าจะทิ้งไปเปล่าๆ ก็อาจรับงานใหม่เข้ามาเลย แล้วก็ทำงานต่อ หรือถ้างานมันว่างมากๆ ก็เอาบาง Thread ทิ้งไปบ้างเพื่อประหยัดเนื้อที่โดยมีเวลากำหนดไว้ว่าว่างเท่าไหร่ถึงจะทิ้ง ซึ่งก็ต้องไปลองวัดเอาหละว่าทำแล้วได้ประสิทธิภาพเพิ่มขึ้นเท่าไหร่ ซึ่ง Executor ก็มีหลายแบบอีก แต่ตอนนี้ที่ใช้เป็นตัวเดียว ฮะๆๆ เพราะงั้นเลยไม่เล่าละเอียดละกัน แต่ใน package java.concurrent ก็มีสำเร็จรูปมาให้บ้างแล้ว ทั้งแบบทำงานทีละ Thread หรือ จำกัดจำนวน Thread ที่มีทั้งหมดในระบบ หรือจะค่อยๆ เพิ่มซึ่งก็เหมาะกับงานแต่ละแบบ โดยสร้างได้จาก java.util.concurrent.Executors เป็น static method ให้เรียกใช้สร้างได้เลย (ตอนแรกพิมพ์ผิดประจำเพราะมักสับสนกับ Executor =_=)
นอกจาก Executor แล้วใน java.util.concurrent ยังมีอย่างอื่นอีกที่ใช้จัดการ Thread แต่ยังสำรวจลองเล่นไม่ทั่ว อีกอย่างคงไม่มีใครเข้าไปเจอตัวอื่นๆ บ่อยๆ หรอกมั้ง แค่นี้ก่อนละกัน เริ่มนึกอะไรไม่ค่อยออกหละ ทิ้งไว้ก่อน ไว้มีแรง + นึกได้จะมาเขียนต่อ =_+
java.util.concurrent.Executor
About llun
Just a programmer-
http://llun.info llun
-
http://sourcode.net sourcode