add multi-thread, but not good