Github user jrthe42 commented on the issue: https://github.com/apache/flink/pull/6301 Hi @sihuazhou , I am not familiar with the checkpoint mechanism of Flink, and I check the source code again. Although the ```RichSinkFunction#invoke()``` and ```RichSinkFunction#snapshotState()``` are not executed in the same thread, but there is already synchronization mechanism in ```StreamTask```. ```StreamTask``` use a **checkpoint lock object** to make sure they won't be called concurrently. Check ```StreamTask#performCheckpoint()``` and ```StreamInputProcessor#processInput()``` if you want to know more. Thanks for your comment, I removed synchronization here, and this PR is updated. cc @yanghua
---