Implement with multi-threads