大家都过来看看这个问题。。。怎么解决?
要求用多线程编写一个打田鼠的游戏,要求程序输出结果为:
跳出第1只田鼠
打第1只田鼠
跳出第2只田鼠
打第2只田鼠
.。。。。。。。。。。。。。。。一直到第100只
------解决方案--------------------怎么让线程不抢占资源呀
--------------------------
什么线程抢占资源??楼主在说什么??
------解决方案--------------------类似生产者-消费者问题:
可以用两个线程来做,一个线程负责进入队列,一个线程出队列,以前的代码.希望有些参考价值,而不是误导.
package net.oicp.sunflowerbbs;
import java.util.Random;
enum Operate {
push, pop
};
class Queue {
private int MaxSize = 10;
private int[] array;
private int top = -1;
Queue() {
this(10);
};
Queue(int size) {
this.MaxSize = size;
assert (size > = 0);
array = new int[size];
}
public synchronized void operate(Operate theOperate,int x)
{
switch(theOperate){
case push:
try
{
while(top > = MaxSize)
wait();
top++;
array[top] = x;
notifyAll();
System.out.println( "进: "+x);
}
catch(Exception e)
{
e.printStackTrace();
}
break;
case pop:
try
{
while((top <= -1))
wait();
System.out.println( "出: "+array[top--]);
notifyAll();
}
catch(Exception e)
{
e.printStackTrace();
}
break;
default:
}
}
}
class MyThread extends Thread
{
private static Queue q=new Queue(20);
private Random rd=new Random();
Operate op;
public void run()
{
String threadName = Thread.currentThread().getName();
try
{
while(!interrupted())
{
if(threadName.equals( "A "))
{
q.operate(op.push,rd.nextInt(100));
}
if(threadName.equals( "B "))
{
q.operate(op.pop, 10);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public class ThreadCP {
public static void main(String[] args) {
Thread t1=new Thread(new MyThread(), "A ");
//t1.setPriority(5);
Thread t2=new Thread(new MyThread(), "B ");
//t2.setPriority(1);
t1.start();
t2.start();
}
}