I struggled with concurrency quite a bit until I stumbled upon the Akka framework for Scala. I was already familiar with Scala, so that made it easy to learn in terms of what I already knew. The Actor Model itself is a very simple concurrency model, and I think understanding that makes it easier to understand other concurrency paradigms.
[0] https://en.wikipedia.org/wiki/Actor_model
[1] https://en.wikipedia.org/wiki/Actor_model#Actor_libraries_an...
Also check out the references / further reading / external links on that wiki page for actual resources.
"when you introduce concurrency into a non-concurrent environment what you do is you change the laws of physics of your program, you change the nature of time"
[1] https://www.youtube.com/watch?v=Hi6ICEVVRiw