public void testReadMultithreadedBulkWrite() throws IOException, InterruptedException {
		final int numThreads = 16;
		final int insertsPerThread = 256;
		final int numEntries = numThreads*insertsPerThread;
		
		final ByteChunk[] keys   = new ByteChunk[numEntries];
		final ByteChunk[] values = new ByteChunk[numEntries];
		
		for( int j=0; j<numEntries; ++j ) {
			keys[j] = fixedRand(32);
			values[j] = rand(2048);
		}
		
		if( f.exists() ) f.delete();
		
		final RandomAccessFileBlob blob = new RandomAccessFileBlob(f, "rw");
		// 7 is chosen to ensure that some indexes must be reused
		// within a chunk.
		final SimpleListFile2 slf = new SimpleListFile2(blob, 7, true);
		try {
			Thread[] threads = new Thread[numThreads];
			for( int i=0; i<numThreads; ++i ) {
				final int offset = i*insertsPerThread;
				threads[i] = new Thread() {
					public void run() {
						slf.multiPut( keys, values, offset, insertsPerThread );
					};
				};
				threads[i].start();
			}
			
			for( int i=0; i<numThreads; ++i ) {
				threads[i].join();
			}
			
			for( int j=0; j<numEntries; ++j ) {
				assertEquals( values[j], slf.get(keys[j]) );
			}
		} finally {
			slf.close();
		}
	}