算法请教
我在写一个多线程下载的,打算用一个类来管理每个线程下载的范围,但写到算法的时候想了一个下午也没有头绪,所以请大家帮帮忙。
方法1:教我算法,(画流程图线我??)
算法要处理如下的问题
1:一个线程拿到任务后只下到一半,又被停掉了。getTask要能把这部份任务重新发出去
2:如果文件已经完全被平均分给四个线程去下载,但是如果我还想再增加一个线程,那它的任务应该怎么分呢?我不可能停掉现有的线程再把这线程算进去,然后再平均分吧?那是不是意味不能用平均分这个算法呢?那算法到底应该怎么样呢?请指教,谢谢
2:暂时不考虑程序被关掉后再打开这情况,因为我还不会串行化怎么用。
方法2:简直帮我把类实现出来, 我想到的类的结构如下
/*
*PositionManager.java
*/
public class PositionManager {
          //我想知道主程缓存的大小有助于分发任务,所以把它也传进来了。
          //fileLength是将要下载的文件的大小
public PositionManager(long fileLength, long bufferSize){
}
/**
 * when the thread had been stoped 
 * or finish,use this to store result
 * @param startPosition
 * @param ednPosition
 */
public void alreadyDown(long startPosition, long endPosition){

}

/**
 * use the DownloadTask object to pass the 
 * startPosition and endPosition
 * if all file had been down or splitfile is too small to add other thread
 * return false
 * @param d
 * @return
 */
public boolean getTask(DownloadTask d){
}
}
/*
* DownloadTask.java
*/
public class DownloadTask {
public long startPosition = 0;
public long endposition = 0;
}

解决方案 »

  1.   

    >1:一个线程拿到任务后只下到一半,又被停掉了。getTask要能把这部份任务重新发出去
    线程是要被管理的,不是放出去就不管了!
    要随时取得线程的状态这样一来就可以再次发出去了啊2:如果文件已经完全被平均分给四个线程去下载,但是如果我还想再增加一个线程,那它的任务应该怎么增加线程的时候 从第一个线程开始平均分为2个然后到下一个线程分配,最后还有没有分配的再返回
    重新分配
      

  2.   

    此问题已经解决,详看下面连接
    http://community.csdn.net/Expert/topic/4552/4552193.xml?temp=.1498377