- // SearchThread.java
- class SearchThread extends Thread {
- private List result = new ArrayList();
- private boolean success_flag = false;
- ...........
- public SearchThread(xxxx,xxxxx) {
- .......
- }
- public void run() {
- this.result = API.getSearchResult(xxxx,xxxx,xxxx);
- this.success_flag = true;
- }
-
- public List getResults() {
- return this.result;
- }
- public boolean isSuccess() {
- return this.success_flag;
- }
- }
- // XXXAction.java
- ...........
- SearchThread thread = new SearchThread(xxxxxx, xxxxxxx);
- thread.start();
- try {
- thread.join(MAX_WAIT_TIME);
- if (thread.isSuccess()) {
- result_lst = thread.getResults();
- } else {
- throw new DataBaseTimeoutException();
- }
- } catch (Exception e) {
- thread.interrupt();
- ........
- }
- MAX_WAIT_TIME就是最大等待时间20秒,如果join()到达最长等待时间,但 是SearchThread里面的success_flag还没有被设置成true的时候,就是说明已经超时,检索没有完成,这个时候会抛出自定义的 DataBaseTimeoutException,中断线程。