Принцип загрузки многопоточной точки останова Java показан на рисунке:
Код заключается в следующем:
Импорт java.io.bufferedReader; Импорт java.io.file; импортировать java.io.fileinputstream; Импорт java.io.inputStreamReader; Импорт java.io.randomaccessfile; Импорт java.net.httpurlConnection; импортировать java.net.url; открытый класс MUSILETHREADDOWLOAD { / *** Количество потоков* / private static int ThreadCount = 3; / *** Размер каждого блока загрузки*/ private static long Blocksize; / *** Количество запущенных потоков*/ private static int rongThreadCount; /** * @param args * @throhs Exception */public static void main (string [] args) бросает исключение {// path of the Server File Path = "http://192.168.1.100:8080/ff.exe"; Url url = new URL (путь); Httpurlconnection conn = (httpurlconnection) url.openconcenection (); conn.setrequestmethod ("Get"); conn.setConnecttimeout (5000); int code = conn.getResponsecode (); if (code == 200) {long size = conn.getContentlength (); // Получить размер файла, возвращаемый Server System.out.println ("Размер файла сервера:" + size); blocksize = size / threadcount; // 1. Сначала создайте пустой файл с тем же размером, что и сервер локально. File file = new File ("temp.exe"); Randomaccessfile raf = new randomaccessfile (файл, "rw"); raf.setlength (размер); // 2. Откройте несколько дочерних потоков, чтобы загрузить соответствующие ресурсы отдельно. rongThreadCount = ThreadCount; for (int i = 1; i <= threadCount; i ++) {long startIndex = (i - 1) * blocksize; long endindex = i * blocksize - 1; if (i == ThreadCount) {// Последний поток EndIdex = size - 1; } System.out.println ("Start Thread:" + i + "Download Location:" + startIndex + "~" + endindex); New DownloadThread (Path, I, StartIndex, Endindex) .start (); }} conn.disconnect (); } private Static Class DownloadThread Extends Thread {private Int Threadid; Private Long StartIndex; частный длинный эндиндекс; частный путь строкости; public DownloadThread (String Path, int ThreadId, Long StartIndex, Long Endindex) {this.path = path; this.ThreadId = thinkId; this.startindex = startIndex; this.endindex = endindex; } @Override public void run () {try {// Общий размер текущего потока загрузки int otto = 0; File positionfile = новый файл (treadid + ".txt"); Url url = new URL (путь); Httpurlconnection conn = (httpurlconnection) url .openconcenection (); conn.setrequestmethod ("Get"); // затем продолжить загрузку данных из предыдущего местоположения if (positionfile.exists () && pocitorfile.length ()> 0) {// определить, существует ли запись fileInputStream fis = new FileInputStream (PositionFile); BufferedReader BR = New BufferedReader (New InputStreamReader (FIS)); // Получить общий размер текущего потока LastTotalStr = br.readline (); int lastTotal = integer.valueof (lastTotalStr); System.out.println («Последний поток» + Threadid + «Общий размер загрузки:« + lastTotal); startIndex += lastTotal; Total += lastTotal; // Добавить общий размер последней загрузки. fis.close (); } conn.setRequestProperty ("range", "bytes =" + startIndex + "-" + endindex); conn.setConnecttimeout (5000); int code = conn.getResponsecode (); System.out.println ("code =" + code); InputStream IS = conn.getInputStream (); File file = new File ("temp.exe"); Randomaccessfile raf = new randomaccessfile (файл, "rw"); // указывает, где файл начинает писать. raf.seek (startindex); System.out.println ("th" + Threadid + "потоки: начальная позиция написания файла:" + string.valueof (startIndex)); int len = 0; Byte [] buffer = новый байт [512]; while ((len = is.read (buffer))! = -1) {randomaccessfile rf = new randomaccessfile (positionfile, "rwd"); raf.write (буфер, 0, Лен); Всего += Лен; rf.write (string.valueof (total) .getbytes ()); rf.close (); } is.close (); raf.close (); } catch (Exception e) {e.printstackTrace (); } наконец {// файл записи может быть удален после загрузки всех потоков. Synchronized (mutilethreaddownload.class) {System.out.println ("Thread" + Threadid + "Загружено"); rongThreadCount--; if (rongThreadCount <1) {System.out.println («Все потоки закончены работа. Удалить файлы для временной записи»); for (int i = 1; i <= threadCount; i ++) {file f = новый файл (i+".txt"); System.out.println (f.delete ()); }}}}}}}}}}}}}}}}}}}}}}}} / }}}}}}}}}}}}}}}}}}}}}}}}}}}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.