📄 taskmanage.java
字号:
package com.network.flashget;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import java.awt.Color;
class TaskManage extends Thread implements Serializable
{
//定义几个必要的变量-----------------------------------------------------------
public long fileLength = 0;
public int threadNum = 0;
public URL url = null;
public long totalDownLength = 0;
public String saveTo = null;
public String fileName = null;
public LinkedList taskThreadList = new LinkedList();
public int rowValue = 0;
public float downRate = 0.0f;
transient public boolean stopFlag = false;
transient public boolean changeFlag = false;
transient public boolean destroyFlag = false;
/**
*构造函数,主要是为了设置变量-------------------------------------------------
**/
TaskManage(URL url,String saveTo,String fileName,long taskLength,int threadNum)
{
rowValue = MainWindow.taskCount - 1;
this.fileLength = taskLength;
this.threadNum = threadNum;
this.saveTo = saveTo;
this.url = url;
this.fileName = fileName;
}
/**
*用于为每个线程分配任务
**/
public void assignMission()
{
if(threadNum == 1)
{
TaskThread taskMission = new TaskThread();
taskMission.url = url;
taskMission.startPosition = 0;
taskMission.finalStart = 0;
taskMission.finalLength = fileLength;
taskMission.endPosition = fileLength;
taskMission.fileName = fileName;
taskMission.saveTo = saveTo;
taskMission.finishFlag = false;
System.out.println(taskMission.startPosition);
System.out.println(taskMission.endPosition);
taskThreadList.add(taskMission);
}
else
{
TaskThread taskMission = new TaskThread();
taskMission.url = url;
taskMission.startPosition = 0;
taskMission.finalStart = 0;
taskMission.endPosition = (fileLength /threadNum);
taskMission.finalLength = taskMission.endPosition - taskMission.startPosition;
taskMission.fileName = fileName;
taskMission.saveTo = saveTo;
taskMission.finishFlag = false;
System.out.println(threadNum);
System.out.println(taskMission.startPosition);
System.out.println(taskMission.endPosition);
taskThreadList.add(taskMission);
for(int i=1; i<threadNum; i++)
{
if(i < threadNum-1)
{
TaskThread taskMission1 = new TaskThread();
taskMission1.url = url;
taskMission1.startPosition = (((fileLength/threadNum) * i) + 1);
taskMission1.finalStart = (((fileLength/threadNum) * i) + 1);
taskMission1.endPosition = (fileLength / threadNum) * (i + 1);
taskMission1.finalLength = taskMission1.endPosition - taskMission1.startPosition;
taskMission1.fileName = fileName;
taskMission1.saveTo = saveTo;
taskMission1.finishFlag = false;
taskThreadList.add(taskMission1);
}
else
{
TaskThread taskMission1 = new TaskThread();
taskMission1.url = url;
taskMission1.startPosition = (((fileLength/threadNum) * i) + 1);
taskMission1.finalStart = (((fileLength/threadNum) * i) + 1);
taskMission1.endPosition = fileLength;
taskMission1.finalLength = taskMission1.endPosition - taskMission1.startPosition;
taskMission1.fileName = fileName;
taskMission1.saveTo = saveTo;
taskMission1.finishFlag = false;
System.out.println(i);
System.out.println(taskMission1.startPosition);
System.out.println(taskMission1.endPosition);
taskThreadList.add(taskMission1);
}
}
}
}
/**
*用于启动下载子线程
**/
public void runSubThread()
{
//用于启动子线程-------------------------------------------------
for(int i = 0;i < taskThreadList.size();i++)
{
//该线程的任务已经下载完成----------------------------------------------
if(((TaskThread)taskThreadList.get(i)).downLength >= ((TaskThread)taskThreadList.get(i)).finalLength)
{
continue;
}
//该线程的下载任务没有完成,继续下载--------------------------------------
else
{
((TaskThread)taskThreadList.get(i)).stopFlag = false;
((TaskThread)taskThreadList.get(i)).start();
}
}
}
/**
*用于启动任务线程------------------------------------------------------------
**/
public void run()
{
outter:
while(true)
{
//判断暂停标志,是否暂停线程--------------------------------
try
{
sleep(500);
synchronized(this)
{
while(stopFlag)
{
for(int i = 0;i < taskThreadList.size();i++)
{
if(destroyFlag)
{
((TaskThread)taskThreadList.get(i)).destroyFlag = true;
}
((TaskThread)taskThreadList.get(i)).stopFlag = true;
System.out.println("thread Stop");
}
if(!changeFlag)
{
(MainWindow.tableDownModel).setValueAt("Stop",rowValue,0);
}
System.out.println("task Stop");
if(destroyFlag)
{
break outter;
}
wait();
}
}
}
catch(InterruptedException e)
{
e.printStackTrace();
}
totalDownLength = 0;
for(int i = 0;i < taskThreadList.size();i++)
{
TaskThread tempThread = (TaskThread)taskThreadList.get(i);
totalDownLength = totalDownLength + tempThread.downLength;
}
//若当前表格中选择的是这个任务,则改变子线程的表格显示----------------------------------------------
if((MainWindow.tableDown.getSelectedRow())==rowValue && MainWindow.tableDownDetail.getRowCount() == taskThreadList.size())
{
for(int i = 0;i < taskThreadList.size();i++)
{
long tempDown = ((TaskThread)taskThreadList.get(i)).downLength;
(MainWindow.tableDownDetailModel).setValueAt(tempDown,i,4);
}
}
//改变任务表格显示------------------------------------------------------
downRate = (float)totalDownLength/fileLength;
synchronized(MainWindow.tableDownDetail)
{
(MainWindow.tableDownModel).setValueAt(totalDownLength,rowValue,3);
(MainWindow.tableDownModel).setValueAt(downRate,rowValue,4);
}
if(totalDownLength >= fileLength)
{
//对表格进行同步处理---------------------------------------------------
synchronized(MainWindow.tableDownDetail)
{
ListChangeThread.changed(rowValue);
}
break;
}
}
}
//唤醒线程--------------------------------------------------------
public synchronized void threadNotify()
{
stopFlag = false;
notify();
System.out.println("task ReStart");
for(int i = 0;i < taskThreadList.size();i++)
{
((TaskThread)taskThreadList.get(i)).stopFlag = false;
((TaskThread)taskThreadList.get(i)).threadNotify();
}
(MainWindow.tableDownModel).setValueAt("Downing",rowValue,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -