nit: use guava's ThreadFactoryBuilder and name these threads?