multi-thread added