1. linux線程是如何進行切換的
基於你的描述,我想可以用互斥信號量來做。
1、初始化2個信號量pmutex1(有資源), pmutex2(無資源),初始化gnum=0
2、啟動兩個線程
2.1 線程1
lock_the_mutex_signal(pmutex1); // 上鎖自身線程,首次可執行
while (gnum < 5) {
do_sth(); // 做你的業務邏輯
gnum++; // 增加執行次數
} // end while()
unlock_the_mutex_signal(pmutex2); // 解鎖另一線程
2.2 線程2
lock_the_mutex_signal(pmutex2); // 上鎖自己,首次執行將阻塞,並交出CPU
while (gnum > 5) {
do_sth(); // ...
gnum--; // ...
} // end while()
unlock_the_mutex_signal(pmutex1); // release the lock
PS:如果你不是非常嚴格地(從系統級杜絕不該被執行的線程被調用)要求線程切換的話,這個邏輯應該可以工作。自己沒有試,希望你明白我的思想,如有錯誤,自己再修改一下。
2. java中,線程有哪五個基本狀態他們之間如何讓轉化並簡述線程周期。
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程內從新生到死亡的狀容態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。