class TaskQueue 
{
private TimeTask[] queue=new TimeTask[128];
private int size=0;
void add(TimeTask task)
{
if (++size==queue.length)
{
TimeTask[] newQueue=new TimeTask[2*queue.length];
System.arraycopy(queue,0,newQueue,0,size);
queue=newQueue;
}
queue[size]=task;
fixUp(size);
}
TimeTask getMin()
{
return queue[1];
}
void removeMin()
{
queue[1]=queue[size];
queue[size--]=null;
fixDown(1);
void rescheduleMin(long newTime)=newTime;
{
queue[1].nextExecutionTime=newTime;
fixDown(1);
}
boolean isEmpty()
{
return size==0;
}
void clear()
{
for(int i=1;i<=size;i++) queue[i]=null;
size=0;
}
private void fixUp(int k)
{
while(k>1)
{
int j=k>>1;
if(queue[j].nextExecutionTime<=queue[k].nextExecutionTime) break;
TimeTask tmp=queue[k];
queue[k]=tmp;
k=j;
}
}
private fixDown(int k)
{
int j;
while((j=k<<1)<=size)
{
if(j<size && queue[j].nextExecutionTime>queue[j+1].nextExecutionTime)
j++;
if(queue[k].nextExecutionTime<=queue[j].nextExecutionTime) break;
queue[j]=queue[i];
queue[k]=tmp;
k=j;
}
}
}
这是我学习多线程中遇到的问题,我想设计一个模块,能够调配计划任务,如定时完成某项特定的工作等,上边是设计的一个类来管理这些任务。是用队列形式来记录这些任务的:
其中的if (++size==queue.length)“++size”是什么意思?还有while((j=k<<1)<=size)的“j=k<<1”我看了资料,但是理解不了。求各位帮帮忙?能解释一下上边的程序更加感激不尽。

解决方案 »

  1.   

    我现在急于想知道的是++size==queue.length怎么理解,我知道如a=++b但是对于++a=b我不懂。
    还有后边的j=k<<1这又是什么,我好像学了两三个月了,这些基本的东西我现在都不会。请各位帮忙,谢谢!!
    我上边的只是一个程序的一个类,没有main()方法。
      

  2.   

    1) ++size==queue.length
    就是先执行
        size = size + 1
    然后再判断是否
        size == queue.length注意,是“==”而不是“=”。2) j = k << 1;
    << 是不带符号左移,因为是二进制,所以“<< 1”(左移1位)等同于“* 2”所以,原式等同于
        j = k * 2;移位操作要比执行乘法速度快。