2012-04-11 84 views
0

我有一個代碼,它爲特定學生id插入特定學生ID的加載過程。 我有大約500個學生ID,必須經過完全相同的程序。 我想在這裏使用多線程,因爲我不想爲一個學生id加載數據。 如何在此場景中使用多線程或在此場景中使用多線程。 這裏我怎麼能在多線程中使用這個龐大的代碼。在java中使用多線程

+0

你試過了什麼?如果你有一臺功能強大的機器和任務的粒度(這些信息是真實的,假設學生規模可​​以增長),多線程技術將會很有幫助。提示:創建線程池(使用Executors),創建任務並將任務提交到線程池。另外,讓數據庫批量提交。 – Scorpion 2012-04-11 04:23:44

+0

我還沒有使用多線程的程序這個large.That是我問的原因。 – 2012-04-11 04:32:45

+0

「負載」是什麼意思?你有數據庫嗎? – trutheality 2012-04-11 04:33:52

回答

4

這裏不要使用多線程。這將需要一個簡單的任務,並使其更加複雜。對於500條記錄,一次只做一條。如果您確實必須使用JDBC批處理來減少數據庫命中次數。

+0

這裏有什麼問題。因爲我有一個多處理器系統,不應該在這裏線程幫助。不會運行多個線程將能夠並行加載每個學生id,而不是一個接一個,這將節省時間。 – 2012-04-11 04:31:58

+0

其中500名學生,我必須執行加載,每個sudent將有數千記錄與一名特定學生相關聯。它不是500條記錄。 – 2012-04-11 04:40:10

+1

仍然沒有區別。數據庫可能是多線程的,並且會適當地分配CPU功率。這是數據庫擅長的。開放500個連接的成本,即使你可以獲得這麼多,也會減少任何節省。您問題中的信息相當稀少,您還沒有提供任何可能表明多線程處於保證狀態的信息。你過分分析並參與過早的優化。嘗試單線程,然後適應,如果它真的太慢。 – 2012-04-11 06:12:14

0

如果你真的覺得你需要的並行訪問數據庫的性能,那麼你將需要:

  • 要在線程將持有的數量有限制使用ThreadPool
  • 每個線程必須保持連接到數據庫的ThreadLocal
  • 每個線程必須保存一條ThreadLocal語句才能執行插入操作。

這並不簡單,但它當然可以做到。請確保你確實需要這樣做。首先要仔細研究配料,看看這是否有幫助。

如果您有興趣,我會盡力在稍後發佈一些示例代碼。

+0

感謝您的答覆。請給我發表一些相同的示例代碼。並且你的意思是說,數據庫的連接對象應該是每個線程的獨佔,並且數據庫語句應該在線程內創建。爲什麼我應該創建一個線程池。我只是計劃在整個工作中有3-4個線程。 – 2012-05-02 09:46:51

+0

@guatam - 你正在尋求大量的代碼。很抱歉,我現在沒有時間將代碼簡潔和有價值地整理在一起。 [Here](http://stackoverflow.com/q/9440505/823393)是一個有'ThreadLocal' db連接示例的問題。請閱讀那裏的評論。 – OldCurmudgeon 2012-05-02 11:22:35