adopt multi threading