爬蟲中基本的多線程
阿新 • • 發佈:2017-11-13
繼承 pub 所有 子類 tin .sh for 導致 語言
因為Java語言中不允許繼承多個類,所以一個類一旦繼承了 Thread類,就不能再繼承其他
類了。為了避免所有線程都必須是Thread的子類,需要獨立運行的類也可以繼承一個系統已經
定義好的叫作Runnable的接口。Thread類有個構造方法public Thread(Runnable target)。當線程
啟動時,將執行target對象的run()方法。Java內部定義的Runnable接口很簡單。
public interface Runnable { public void run(); }
實現這個接口,然後把要同步執行的代碼寫在nm()方法中,測試類。
publicclass Test implements Runnable { public void run() { System.out.println ("test") / //同步執行的代碼 }
運行需要同步執行的代碼。
public class RunIt { public static void main(String[] args) { Test a = new Test(); //a.run();錯誤的寫法 //Thread需要一個線程對象,然後它用其中的代碼向系統申請CPU時間片 Thread thread=new Thread(a); thread.start(); }
用不同的線程處理不同的目錄頁。
public class DownloadSina implements Runnable { private static int i = 1; @Override public void run() { String url = null; for (;;) { synchronized ("") { url = "http://roll.mil.news.sina.com.cn/col/zgjq/index" + i++ + ".shtml"; } System.out.println(url);// 執行下載和處理目錄頁 } } public static void main(String[] args) throws Exception { DownloadSina st = new DownloadSina(); Thread tl = new Thread(st); // 啟動3個下載線程 Thread t2 = new Thread(st); Thread t3 = new Thread(st); tl.start(); t2.start(); t3.start(); } }
在Java中,為了爬蟲穩定性,也可以用多線程來實現爬蟲。一般情況下,爬蟲程序需要能
在後臺長期穩定運行。下載網頁時,經常會出現異常。有些異常無法捕獲,導致爬蟲程序退出。
為了主程序穩定,可以把下載程序放在子線程執行,這樣即使子線程因為異常退出了,但是主
線程並不會退出。測試代碼如下所示。
public class Mythread extends Thread { public void run() { System.out.println("Throwing in " +"MyThread"); throw new RuntimeException(); } } public class ThreadTest{ public static void main(String[] args) { Mythread t = new Mythread(); t.start(); try { Thread.sleep(2000); } catch (Exception e) { System.out.println("Caught it"); } System.out.println("Exiting main"); } }
爬蟲中基本的多線程