⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listenthread.java

📁 用Java开发的多线程下载工具
💻 JAVA
字号:
package download;

/**
 *功能:监听文件线程下载状态,该线程创建定时器,每秒执行一次,用于计算下载速度
 */
import java.util.Timer;
import java.util.TimerTask;

public class ListenThread
{
	private DownLoadInfo downInfo;

	private Timer tmr;

	private boolean isFinished;

	private boolean isError;

	private DownLoadThread[] down;

	public ListenThread(DownLoadInfo downInfo, DownLoadThread[] down)
	{
		this.downInfo = downInfo;
		this.down = down;
		tmr = new Timer();
		tmr.schedule(new MyTimerTask(), 0, 1000);
	}

	/**
	 * 功能:监听下载线程是否结束或出错 返回值:无
	 */
	final private void listenFinished()
	{
		boolean flag = true;
		for (int i = 0; i < down.length; i++)
		{
			if (down[i].isFinished() == false)
			{
				flag = false;
			}
			if (down[i].isError() == true)
			{
				isError = true;
				break;
			}
		}
		isFinished = flag;
	}

	/**
	 * 功能:内部类实现定时器
	 */
	class MyTimerTask extends TimerTask
	{
		public void run()
		{
			// 获取线程状态信息
			listenFinished();
			if (isFinished)// 如果下载结束,关闭定时器,更新文件下载信息标志
			{
				tmr.cancel();
				downInfo.setFinished(true);
				System.out.println("资源[" + downInfo.getDownURL()
						+ "]下载完毕!,文件保存在" + downInfo.getSaveFileName());
			}
			else
			// 如果还在下载中,察看线程下载是否出错
			{
				if (isError)// 如果出错,关闭定时器,更新文件下载标志,以便结束所有下载线程
				{
					tmr.cancel();
					downInfo.setError(true);
					System.out
							.println("资源[" + downInfo.getDownURL() + "]下载错误!");
				}
				else
				// 如果没出错,计算下载速度
				{
					downInfo.setDownSpeed();
					System.out.println("资源[" + downInfo.getDownURL() + "]文件长度="
							+ downInfo.getFileLength() + "byte  已下载长度="
							+ downInfo.getDownLength() + "byte  下载速度="
							+ downInfo.getDownSpeed() + "k  下载进度="
							+ downInfo.getDownProgress());
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -