How to track blocking that happen for less than a second - SQL Server
As you are specifically interested in locking rather than general waits the locks_lock_waits extended event sounds more suitable. 

With a filter on increment &gt;= 200

CREATE EVENT SESSION [locks_lock_waits] ON SERVER 
ADD EVENT sqlserver.locks_lock_waits(
        ACTION(sqlserver.sql_text)
            WHERE  ( [sqlserver].[is_system] = 0
                     AND [increment] &gt;= 200
                     AND [counter] &lt;= 1000 ) 
    )
ADD TARGET package0.ring_buffer;

GO

ALTER EVENT SESSION [locks_lock_waits]  
ON SERVER  STATE = start;  


The above gathers the statements waiting on locks for the threshold amount of time but doesn't give the specific lock resource.

I have never used this event and have no insight into how much overhead this session would cause on your production server.

I found this video on the topic. That does strongly recommend filtering on counter to reduce the number of events collected and I have done so above.

It also mentions an old legacy undocumented command

dbcc lock(StallReportThreshold, 200) -- 200 is threshold in ms


Which (if trace flag 3605 is enabled) dumps out limited information such as the below to the SQL Server error log.


  Process 53 waited 6844 ms for S lock on RID: 2:1:120:2 result: OKWAIT


I just mention this in passing as extended events would be clearly preferable anyway as it is documented and much more powerful.