SQL Server 2016 - “Always on” issue on secondary server , redo thread blocked
As per my understanding, this issue could be due to the multi-threading model or parallelism.

Until SQL Server 2016, the transaction log redo was handled by single redo thread for each database, this model is called as serial redo.

Starting from SQL Server 2016, the default redo model is parallel redo. It provides multiple threads for transactions and additional worker threads for dirty page flush IO operations.

While working with the concurrent workload, DIRTY_PAGE_TABLE_LOCK waits are generated frequently by the worker thread, and at the same time, query threads will try to access the tables, this will cause the performance issues on both SELECT query and redo operations.

This issue was fixed on the latest Cummulative Update - https://support.microsoft.com/en-in/help/4135048/cumulative-update-1-for-sql-server-2016-sp2

As a workaround, you can disable the parallel redo model and enable the serial redo by enabling the trace flag 3459.

I hope this helps! Thank you.