Java单线程堵塞解决方案

Java单线程阻塞解决方案

 

转至:http://www.blogjava.net/unser/archive/2008/01/09/174052.html

 

一个Feed提取小程序,但有时由于Feed长时间无响应,所以需要去判断是否超时,以下的程序
主线程:

 1Java单线程堵塞解决方案package test.thread;
 2Java单线程堵塞解决方案
 3Java单线程堵塞解决方案import com.sun.syndication.feed.synd.SyndFeed;
 4Java单线程堵塞解决方案
 5Java单线程堵塞解决方案public class RssThread extends Thread {
 6Java单线程堵塞解决方案    
 7Java单线程堵塞解决方案    public void run() {
 8Java单线程堵塞解决方案        while(true)
 9Java单线程堵塞解决方案        {
10Java单线程堵塞解决方案            try
11Java单线程堵塞解决方案            {
12Java单线程堵塞解决方案                
13Java单线程堵塞解决方案                System.out.println("start");
14Java单线程堵塞解决方案                
15Java单线程堵塞解决方案                String[] str = new String[]{"http://del.icio.us/rss/geneboy",
16Java单线程堵塞解决方案                        "http://picasaweb.google.com/data/feed/base/user/icyleaf.cn",
17Java单线程堵塞解决方案                        "http://feeds.qzone.qq.com/cgi-bin/cgi_rss_out?uin=414680"}
;
18Java单线程堵塞解决方案                
19Java单线程堵塞解决方案                forint i = 0 ; i < str.length ; i++ )
20Java单线程堵塞解决方案                {
21Java单线程堵塞解决方案                    System.out.println("url = " + str[i]);
22Java单线程堵塞解决方案
23Java单线程堵塞解决方案                    RssUtil ru = new RssUtil();
24Java单线程堵塞解决方案                    ru.setUrl(str[i]);
25Java单线程堵塞解决方案                    ru.start();
26Java单线程堵塞解决方案                    
27Java单线程堵塞解决方案                    while(true)
28Java单线程堵塞解决方案                    {
29Java单线程堵塞解决方案                        sleep(2000);
30Java单线程堵塞解决方案                        SyndFeed feed = ru.getFeed();
31Java单线程堵塞解决方案                        System.out.println("feed = " + (feed != null ? "ok" : "timeOut"));
32Java单线程堵塞解决方案                        
33Java单线程堵塞解决方案                        if ( feed == null )
34Java单线程堵塞解决方案                        {
35Java单线程堵塞解决方案                            sleep(10000);
36Java单线程堵塞解决方案                            
37Java单线程堵塞解决方案                            feed = ru.getFeed();
38Java单线程堵塞解决方案                            System.out.println("second feed = " + (feed != null ? "ok" : "timeOut"));
39Java单线程堵塞解决方案                        }
                            
40Java单线程堵塞解决方案                        
41Java单线程堵塞解决方案                        if ( feed == null )
42Java单线程堵塞解决方案                        {
43Java单线程堵塞解决方案                            break;
44Java单线程堵塞解决方案                        }

45Java单线程堵塞解决方案                        else
46Java单线程堵塞解决方案                        {
47Java单线程堵塞解决方案                            System.out.println("处理不null");
48Java单线程堵塞解决方案                            break;
49Java单线程堵塞解决方案                        }

50Java单线程堵塞解决方案                    }

51Java单线程堵塞解决方案                }

52Java单线程堵塞解决方案                
53Java单线程堵塞解决方案                System.out.println("end");
54Java单线程堵塞解决方案                
55Java单线程堵塞解决方案                sleep(2000);
56Java单线程堵塞解决方案                
57Java单线程堵塞解决方案            }
catch(Exception e)
58Java单线程堵塞解决方案            {
59Java单线程堵塞解决方案                //e.printStackTrace();
60Java单线程堵塞解决方案            }

61Java单线程堵塞解决方案        }
        
62Java单线程堵塞解决方案    }

63Java单线程堵塞解决方案    
64Java单线程堵塞解决方案    public static void main(String[] args)
65Java单线程堵塞解决方案    {
66Java单线程堵塞解决方案        RssThread rss = new RssThread();
67Java单线程堵塞解决方案        rss.start();
68Java单线程堵塞解决方案    }

69Java单线程堵塞解决方案}

70Java单线程堵塞解决方案


RssUtil:负责提取Rss

 1Java单线程堵塞解决方案package test.thread;
 2Java单线程堵塞解决方案
 3Java单线程堵塞解决方案import java.net.URL;
 4Java单线程堵塞解决方案
 5Java单线程堵塞解决方案import org.apache.commons.logging.Log;
 6Java单线程堵塞解决方案import org.apache.commons.logging.LogFactory;
 7Java单线程堵塞解决方案
 8Java单线程堵塞解决方案import com.sun.syndication.feed.synd.SyndFeed;
 9Java单线程堵塞解决方案import com.sun.syndication.io.SyndFeedInput;
10Java单线程堵塞解决方案import com.sun.syndication.io.XmlReader;
11Java单线程堵塞解决方案
12Java单线程堵塞解决方案/**
13Java单线程堵塞解决方案 * Rss相关
14Java单线程堵塞解决方案 * 
15Java单线程堵塞解决方案 * @author Administrator
16Java单线程堵塞解决方案 * 
17Java单线程堵塞解决方案 */

18Java单线程堵塞解决方案public class RssUtil extends Thread {
19Java单线程堵塞解决方案    
20Java单线程堵塞解决方案    private String url;
21Java单线程堵塞解决方案    
22Java单线程堵塞解决方案    private SyndFeed feed;
23Java单线程堵塞解决方案
24Java单线程堵塞解决方案    private static final Log logger = LogFactory.getLog(RssUtil.class);
25Java单线程堵塞解决方案    
26Java单线程堵塞解决方案    public void run() {
27Java单线程堵塞解决方案        
28Java单线程堵塞解决方案        feed = getFeed(url);
29Java单线程堵塞解决方案    }

30Java单线程堵塞解决方案
31Java单线程堵塞解决方案    /**
32Java单线程堵塞解决方案     * 获得Feed
33Java单线程堵塞解决方案     * 
34Java单线程堵塞解决方案     * @param url
35Java单线程堵塞解决方案     * @return
36Java单线程堵塞解决方案     */

37Java单线程堵塞解决方案    public SyndFeed getFeed(String url) {
38Java单线程堵塞解决方案        try 
39Java单线程堵塞解决方案        {
40Java单线程堵塞解决方案            URL feedUrl = new URL(url);
41Java单线程堵塞解决方案            SyndFeedInput input = new SyndFeedInput();
42Java单线程堵塞解决方案
43Java单线程堵塞解决方案            SyndFeed feed = input.build(new XmlReader(feedUrl));
44Java单线程堵塞解决方案
45Java单线程堵塞解决方案            return feed;
46Java单线程堵塞解决方案            
47Java单线程堵塞解决方案        }
 catch (Exception ex) {
48Java单线程堵塞解决方案            //ex.printStackTrace();
49Java单线程堵塞解决方案        }

50Java单线程堵塞解决方案
51Java单线程堵塞解决方案        return null;
52Java单线程堵塞解决方案    }

53Java单线程堵塞解决方案
54Java单线程堵塞解决方案    public SyndFeed getFeed() {
55Java单线程堵塞解决方案        return feed;
56Java单线程堵塞解决方案    }

57Java单线程堵塞解决方案
58Java单线程堵塞解决方案    public void setFeed(SyndFeed feed) {
59Java单线程堵塞解决方案        this.feed = feed;
60Java单线程堵塞解决方案    }

61Java单线程堵塞解决方案
62Java单线程堵塞解决方案    public String getUrl() {
63Java单线程堵塞解决方案        return url;
64Java单线程堵塞解决方案    }

65Java单线程堵塞解决方案
66Java单线程堵塞解决方案    public void setUrl(String url) {
67Java单线程堵塞解决方案        this.url = url;
68Java单线程堵塞解决方案    }

69Java单线程堵塞解决方案}


<!--EndFragment-->