1. 線程組,在我們測(cè)試方案里面,每個(gè)線程模擬一個(gè)用戶,執(zhí)行用戶的登錄、等等等一系列的操作。由于我們的項(xiàng)目是長(zhǎng)連接的,如何能實(shí)現(xiàn)多個(gè)sample公用一個(gè)長(zhǎng)連接客戶端,考慮了很久,后實(shí)現(xiàn)方法如下:
	1 package tea.client.network;
	2 /**
	3  * @author Teaey
	4  * @creation 2012-8-25
	5  */
	6 public class NetworkClientHolder
	7 {
	8     /**
	9      * 這里使用ThradLocal存儲(chǔ)BaseClient
	10      * 方便一輪測(cè)試的每個(gè)sample都是由同一個(gè)socketChannel發(fā)送
	11      * 更真實(shí)的模擬用戶
	12      */
	13     private static ThreadLocal<BaseClient> clientHolder = new ThreadLocal<BaseClient>();
	14     public static BaseClient getClient(String ip, String port)
	15     {
	16         BaseClient client = clientHolder.get();
	17         if (null == client)
	18         {
	19             client = new BaseClient(ip, port);
	20             client.connect();
	21             clientHolder.set(client);
	22         }
	23         return client;
	24     }
	25 }
	  代碼中使用thread_local保存Socket客戶端,這樣每個(gè)sample中發(fā)送數(shù)據(jù)的客戶端都是從這里拿的,可以保證長(zhǎng)連接的情況下,socket不會(huì)重復(fù)創(chuàng)建,很好的模擬了用戶。
	  當(dāng)然不單單是鏈接可以保存,所有需要在線程中共享的數(shù)據(jù)都可以通過(guò)這種方法來(lái)實(shí)現(xiàn)。