public void runWriter() throws Exception {
   new File(FILE_NAME).delete();
   System.out.println("Waiting 3s, now start the reader");
   Thread.sleep(3000);
   MemoryMappedFile mem = new MemoryMappedFile(FILE_NAME, FILE_SIZE);
   mem.putLong(NON_VOLATILE_FIELD, 1);
   mem.putLongVolatile(VOLATILE_FIELD, 2);
   mem.unmap();
 }
 public void runReader() throws Exception {
   MemoryMappedFile mem = new MemoryMappedFile(FILE_NAME, FILE_SIZE);
   long nonVolatileField = mem.getLong(NON_VOLATILE_FIELD);
   assertEquals(0, nonVolatileField, "Non Volatile Field");
   long volatileField = mem.getLongVolatile(VOLATILE_FIELD);
   assertEquals(0, volatileField, "Volatile Field");
   long start = System.currentTimeMillis();
   while (true) {
     volatileField = mem.getLongVolatile(VOLATILE_FIELD);
     if (volatileField != 0) {
       break;
     }
     if (System.currentTimeMillis() - start > 3000) {
       System.out.println("TEST FAILED: timeout waiting for the volatile field to change");
       return;
     }
   }
   nonVolatileField = mem.getLong(NON_VOLATILE_FIELD);
   assertEquals(1, nonVolatileField, "Non Volatile Field");
   assertEquals(2, volatileField, "Volatile Field");
   mem.unmap();
 }