㈠ 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方法里写。如果子弹多了。你的游戏效率是很低的。 这是我的建议