㈠ java線程的幾個概念和方法
新建狀態:用new語句創建的線程對象處於新建狀態,此時它和其它的java對象一樣,僅僅在堆中被分配了內存 就緒狀態:當一個線程創建了以後,其他的線程調用了它的start()方法,該線程就進入了就緒狀態。處於這個狀態的線程位於可運行池中,等待獲得CPU的使用權
運行狀態:處於這個狀態的線程佔用CPU,執行程序的代碼
阻塞狀態:當線程處於阻塞狀態時,java虛擬機不會給線程分配CPU,直到線程重新進入就緒狀態,它才有機會轉到運行狀態。
阻塞狀態分為三種情況:
1、 位於對象等待池中的阻塞狀態:當線程運行時,如果執行了某個對象的wait()方法,java虛擬機就回把線程放到這個對象的等待池中
2、 位於對象鎖中的阻塞狀態,當線程處於運行狀態時,試圖獲得某個對象的同步鎖時,如果該對象的同步鎖已經被其他的線程佔用,JVM就會把這個線程放到這個對象的瑣池中。
3、 其它的阻塞狀態:當前線程執行了sleep()方法,或者調用了其它線程的join()方法,或者發出了I/O請求時,就會進入這個狀態中。
㈡ java中Vector中的對象,中調用後,如何再獲得其線程對象
Vector 可以用Iterator迭代的。也可以用for循環進行遍歷。比如:
for (Iterator iterator = vec.iterator(); iterator.hasNext();) {
Bullet bullet = (Bullet) iterator.next();
}
for (int i = 0; i < vec.size(); i++) {
Bullet b = (Bullet) vec.get(i); // 得到的object對象強轉為Bullet對象
}
你在for循環里添加判斷就好了。也就是你所謂的 獲得各個Bullet對象線程運行的情況 。 不過注意迭代的時候是不能對容器進行更改的。所謂更改比如刪除或者增加一個Bullet對象到容器中。
另外,我也寫過java游戲。曾經也寫過一個關於Bullet類的。 我覺得沒有必要把每個子彈定義成一個線程。 子彈的運動完全可以在draw方法里寫。如果子彈多了。你的游戲效率是很低的。 這是我的建議