1. 程式人生 > >爬蟲中基本的多線程

爬蟲中基本的多線程

繼承 pub 所有 子類 tin .sh for 導致 語言

因為Java語言中不允許繼承多個類,所以一個類一旦繼承了 Thread類,就不能再繼承其他
類了。為了避免所有線程都必須是Thread的子類,需要獨立運行的類也可以繼承一個系統已經
定義好的叫作Runnable的接口。Thread類有個構造方法public Thread(Runnable target)。當線程
啟動時,將執行target對象的run()方法。Java內部定義的Runnable接口很簡單。

public interface Runnable {
public void run();
}

實現這個接口,然後把要同步執行的代碼寫在nm()方法中,測試類。

public
class 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");
    }
}

爬蟲中基本的多線程