สนับสนุนโดย

วันศุกร์ที่ 21 ธันวาคม พ.ศ. 2561

thread rescheduling

สำหรับคลาส Thread มี method ชื่อ yield() สำหรับเรียกเพื่อให้ thread ที่กำลังทำงานอยู่หยุดการทำงานแล้วออกมาที่สถานะ Runnable และจะกลับไปทำงานอีกในภายหลัง โดยจะหยุดทำงานอย่างยินยอมพร้อมใจ หมายถึงว่า thread นั้นเป็นผู้เรียกเอง ไม่ใช่โดน thread อื่นสั่งให้หยุด



ลองมาดูตัวอย่างโค้ดกัน
package myPackage;

class YieldThread extends Thread {
    YieldThread(String name) {
        super(name);
    }
    
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.print(getName());
            yield();
        }
    }
}

public class YieldTest {
    public static void main(String[] args) {
        new YieldThread("A").start();
        new YieldThread("B").start();
    }
}

ผลการทำงาน
AAAAAAAABBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAABBAAAAAAAAAAAABBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

สังเกตุว่าโปรแกรมจะทำงานพิมพ์ A, B ออกมาติดกัน ไม่ได้สลับกันแบบในตัวอย่างก่อนหน้านี้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น