add 3 locks concept
add watcher and listener