From 3c79d031bd339bbc65d2e78db7011726f0d3d50e Mon Sep 17 00:00:00 2001 From: "yihua.huang" Date: Sun, 22 Sep 2013 22:52:52 +0800 Subject: [PATCH] fix thread pool --- .../src/main/java/us/codecraft/webmagic/Spider.java | 11 ++++++----- .../us/codecraft/webmagic/selector/Selectors.java | 5 ----- .../java/us/codecraft/webmagic/utils/UrlUtils.java | 2 -- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java b/webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java index 40fb70d..45766f3 100644 --- a/webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java @@ -234,12 +234,15 @@ public class Spider implements Runnable, Task { } Request request = scheduler.poll(this); //single thread - if (executorService == null) { + if (threadNum <= 1) { while (request != null && stat.compareAndSet(STAT_RUNNING, STAT_RUNNING)) { processRequest(request); request = scheduler.poll(this); } } else { + synchronized (this) { + this.executorService = ThreadUtils.newFixedThreadPool(threadNum); + } //multi thread final AtomicInteger threadAlive = new AtomicInteger(0); while (true && stat.compareAndSet(STAT_RUNNING, STAT_RUNNING)) { @@ -363,10 +366,11 @@ public class Spider implements Runnable, Task { public void stop() { stat.compareAndSet(STAT_RUNNING, STAT_STOPPED); + executorService.shutdown(); } public void stopAndDestroy() { - stat.compareAndSet(STAT_RUNNING, STAT_STOPPED); + stop(); destroy(); } @@ -385,9 +389,6 @@ public class Spider implements Runnable, Task { if (threadNum == 1) { return this; } - synchronized (this) { - this.executorService = ThreadUtils.newFixedThreadPool(threadNum); - } return this; } diff --git a/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectors.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectors.java index 9764641..0c34ead 100644 --- a/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectors.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectors.java @@ -44,9 +44,4 @@ public abstract class Selectors { return new OrSelector(selectors); } - public static void main(String[] args) { - String s = "a"; - or(regex("(.*)"), xpath("//title"), $("title")).select(s); - } - } \ No newline at end of file diff --git a/webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java b/webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java index 4e5f67f..9ca776d 100644 --- a/webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java @@ -16,8 +16,6 @@ import java.util.regex.Pattern; */ public class UrlUtils { - private static Pattern relativePathPattern = Pattern.compile("^([\\.]+)/"); - /** * canonicalizeUrl *