Spring線程池開發實戰
作者:chszs,轉載需註明。
作者博客主頁:http://blog.csdn.net/chszs本文提供了三個Spring多線程開發的例子,由淺入深,由於例子一目瞭然,所以並未做過多的解釋。諸位一看便知。
前提條件:
1)在Eclipse創建一個Java項目,我取名爲SpringThreadDemo。2)項目所需的JAR包如圖所示:
下面開始。
例子1:Spring結合Java線程。
通過繼承Thread創建一個簡單的Java線程,然後使用@Component讓spring容器管理此線程,Bean的範圍必須是prototype,因此每個請求都會返回一個新實例,運行每個單獨的線程。
PrintThread.java
AppConfig.java
App.java
輸出:
Thread 1 is running.Thread 2 is running.
Thread 4 is running.
Thread 5 is running.
Thread 3 is running.
Thread 2 is running again.
Thread 1 is running again.
Thread 5 is running again.
Thread 4 is running again.
Thread 3 is running again.
例子2:Spring線程池結合非Spring託管Bean。
使用Spring的ThreadPoolTaskExecutor類創建一個線程池。執行線程無需受Spring容器的管理。
PrintTask.java
Spring-Config.xml
注意這個Spring配置文件的位置,如圖所示:
App1.java
輸出:
Thread 1 is running.
Thread 2 is running.
Thread 3 is running.
Thread 4 is running.
Active Threads : 4
Thread 5 is running.
Active Threads : 5
Active Threads : 5
Active Threads : 5
Active Threads : 5
Active Threads : 5
Thread 4 is running again.
Thread 2 is running again.
Thread 3 is running again.
Thread 1 is running again.
Thread 5 is running again.
Active Threads : 0
作者:chszs,轉載需註明。博客主頁:http://blog.csdn.NET/chszs
例子3:Spring線程池結合Spring託管Bean。
本例仍然使用ThreadPoolTaskExecutor類,並使用@Component註釋聲明Spring的託管Bean。
下面的例子PrintTask2是Spring的託管Bean,使用@Autowired註釋簡化代碼。
PrintTask2.java
AppConfig.java
App2.java
輸出:
Thread 1 is running.
Thread 2 is running.
Active Threads : 2
Thread 3 is running.
Active Threads : 3
Active Threads : 3
Active Threads : 3
Active Threads : 3
Thread 1 is running again.
Thread 2 is running again.
Thread 3 is running again.
Active Threads : 1
Active Threads : 0
從這三個簡單的實例中,你是不是發現了Spring框架在多線程方面的強大之處!!