Developing concurrent programs is intrinsically difficult. They are subject to programming errors that are not present in traditional sequential programs. Our current work is to design and implement a hybrid approach that integrates static and dynamic analyses to check concurrency-related programming errors more accurately and efficiently. The experiments show that the hybrid approach is able to detect concurrency errors in unexecuted parts of the code compared to dynamic analysis, and produce fewer false alarms compared to static analysis. Our future work includes but is not limited to optimizing performance, improving accuracy, as well as locating and confirming concurrency errors.