package week3.thread; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.CountDownLatch; public class DownloadThread extends Thread { private File file; private CountDownLatch countDownLatch; private String address; private int startPos; private int endPos; public DownloadThread(File file, CountDownLatch countDownLatch, String address, int startPos, int endPos) { super(); this.file = file; this.countDownLatch = countDownLatch; this.address = address; this.startPos = startPos; this.endPos = endPos; } public void run() { Thread current = Thread.currentThread(); System.out.println(current.getName() + "开始下载:" + startPos + "-" + endPos); RandomAccessFile randomAccessFile = null; InputStream inputStream = null; try { URL url = new URL(address); HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection(); httpURLConnection.setRequestProperty("Range", "bytes=" + startPos + "-" + endPos); inputStream = httpURLConnection.getInputStream(); randomAccessFile = new RandomAccessFile(file, "rw"); randomAccessFile.seek(startPos); byte[] bytes = new byte[1024]; int read = 0; while ((read = inputStream.read(bytes)) != -1) { randomAccessFile.write(bytes, 0, read); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (randomAccessFile != null) { randomAccessFile.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } System.out.println(current.getName() + "下载完成"); countDownLatch.countDown(); } } }