add multithread function