算法请教
我在写一个多线程下载的,打算用一个类来管理每个线程下载的范围,但写到算法的时候想了一个下午也没有头绪,所以请大家帮帮忙。
方法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:简直帮我把类实现出来, 我想到的类的结构如下
/*
*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;
}
线程是要被管理的,不是放出去就不管了!
要随时取得线程的状态这样一来就可以再次发出去了啊2:如果文件已经完全被平均分给四个线程去下载,但是如果我还想再增加一个线程,那它的任务应该怎么增加线程的时候 从第一个线程开始平均分为2个然后到下一个线程分配,最后还有没有分配的再返回
重新分配
http://community.csdn.net/Expert/topic/4552/4552193.xml?temp=.1498377