2013-05-01 12 views
2

我搜索了一段時間,但沒有找到具體的解決方案,有些使用像.setTimeout(...)這樣的函數方法,但我只是想設置一個公共方法的超時在我的項目中。 爲什麼?因爲在代碼中,我向你展示了底部有時候,我沒有從我的網站上發佈我的WordPress發佈的回覆,並且它終止了所有預定發佈處理程序。如何在Java中爲公共方法超時?

public void blogPublish(String articleTitle, String articleText, Date pubDate, String sourceDomain, String sourceAuthor, String blogCategory) throws XmlRpcFault{ 
    String fullArticleContent = articleText; 
    XmlRpcArray categoryArray = new XmlRpcArray(); 
    categoryArray.add(blogCategory); 
    this.post = new Page(); 
    this.post.setTitle(articleTitle); 
    this.post.setDescription(fullArticleContent); 
    this.post.setDateCreated(pubDate); 
    this.post.setCategories(categoryArray); 
    String newPostIds = this.WP.newPost(post, true); 
    int newPostId = Integer.valueOf(newPostIds).intValue(); 
    Page postNow = WP.getPost(newPostId); 
    System.out.println("Article Posted. Title=> "+ articleTitle); 
} 

我怎樣才能超時整個blogPublish功能?我需要跳過它,如果5秒後我仍然沒有回覆從我的網站發佈,因爲它太慢或在那一刻無法訪問。

回答

5

查看來自Guava的SimpleTimeLimiter.callWithTimeout

在你的情況下,它可能看起來像類似於這樣:

final String articleTitle = ...; 
final String articleText = ...; 
final Date pubDate = ...; 
final String sourceDomain = ...; 
final String sourceAuthor = ...; 
final String blogCategory = ...; 
final SomeClassOfYours someClassOfYours = ...; 

Callable<Void> callable = new Callable<Void>() { 
    public Void call() throws XmlRpcFault { 
     someClassOfYours.blogPublish(articleTitle, articleText, pubDate, sourceDomain, sourceAuthor, blogCategory); 
    } 
} 
new SimpleTimeLimiter().callWithTimeout(callable, 5, TimeUnit.SECONDS, true); 
+0

這似乎是一個很好的解決方案,但我有點新手,我不知道如何實現它,我甚至搜索,但沒有例子,只有代碼文檔。 你有沒有一個如何在我的案例中構建它的例子?我已經在課堂上導入了圖書館,我有我之前粘貼的功能。 – HypercubeLabs 2013-05-01 15:06:44

+0

你需要將你的函數包裝成一個'Callable',以便它可以被'SimpleTimeLimiter'接受。我編輯了我的答案來提供一個例子。 P.s.方法參數過量(在你的情況下爲6)是一種代碼異味。 – mindas 2013-05-01 15:35:40

+0

這是完美的,工作正常。非常感謝! – HypercubeLabs 2013-05-02 08:29:25

相關問題