executor executor = executors.newfixedthreadpool(10);
runnable task = new runnable()
};
executor.execute(task);
executor = executors.newscheduledthreadpool(10);
scheduledexecutorservice scheduler = (scheduledexecutorservice) executor;
scheduler.scheduleatfixedrate(task, 10, 10, timeunit.seconds);
executorservice擴充套件了executor並新增了一些生命週期管理的方法。乙個executor的生命週期有三種狀態,執行 ,關閉 ,終止 。executor建立時處於執行狀態。當呼叫executorservice.shutdown()後,處於關閉狀態,isshutdown()方法返回true。這時,不應該再想executor中新增任務,所有已新增的任務執行完畢後,executor處於終止狀態,isterminated()返回true。
如果executor處於關閉狀態,往executor提交任務會丟擲unchecked exception rejectedexecutionexception。
executorservice executorservice = (executorservice) executor;
while (!executorservice.isshutdown())
catch (rejectedexecutionexception ignored)
} executorservice.shutdown();
future代表乙個非同步執行的操作,通過get()方法可以獲得操作的結果,如果非同步操作還沒有完成,則,get()會使當前執行緒阻塞。futuretask實現了future和runable。callable代表乙個有返回值得操作。
callable<
integer
> func =
new callable<
integer
>()
};
futuretask<
integer
> futuretask =
new futuretask<
integer
>(func);
thread newthread =
newthread(futuretask);
newthread.start();
try catch (interruptedexception ignored) catch (executionexception ignored)
executoreservice提供了submit()方法,傳遞乙個callable,或runnable,返回future。如果executor後台執行緒池還沒有完成callable的計算,這呼叫返回future物件的get()方法,會阻塞直到計算完成。
在剛在的例子中,getresult()方法的實現過程中,迭代了futuretask的陣列,如果任務還沒有完成則當前執行緒會阻塞,如果我們希望任意字任務完成後就把其結果加到result中,而不用依次等待每個任務完成,可以使completionservice。生產者submit()執行的任務。使用者take()已完成的任務,並按照完成這些任務的順序處理它們的結果 。也就是呼叫completionservice的take方法是,會返回按完成順序放回任務的結果,completionservice內部維護了乙個阻塞佇列blockingqueue,如果沒有任務完成,take()方法也會阻塞。修改剛才的例子使用completionservice:
public
class
concurrentcalculator2
public
concurrentcalculator2()
public long sum(final
int numbers)
} return getresult();
} /**
* 迭代每個只任務,獲得部分和,相加返回
* *@return
*/public long getresult() catch (interruptedexception e) catch (executionexception e)
} return result;
} public
void
close()
}
JAVA多執行緒之 執行緒池
執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...
Java多執行緒之執行緒安全
當多個執行緒訪問某乙個類 物件或方法時 這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。public class mythread extends thread public static void main string args 結果如下 t1正在執行 4 t1正在執行...
java 多執行緒 之 Excutor
excutor介面 提供了一種將任務提交和任務執行機制相分離的方法 excutorservice介面 提供了excutor的管理介面,以及可為跟蹤乙個或多個非同步任務狀態而生成future的方法 scheduledexcutorservice介面 提供了可以安排在給定的延遲後執行或定時執行的命令 方...