Don't mistake "foundations" to mean "basic" - the course assumes you're ready and willing to put in the effort to learn the content if you're unfamiliar with concurrency in general. As with many theoretical computer science courses, the course involves a lot of maths, usually a lot of logic, and being able to understand mathematical notation. I'd recommend having dome
MATH1081 before this course, though Liam has since left UNSW and may no longer be teaching the course, in which case the course could change completely (as it did the year before).
Content-wise, the course focusses mostly on verification of concurrent programs. Things like proving a program will produce a required result using Hoare logic, or proving an algorithm will always terminate. Of course, this includes concurrent properties, like livelock and deadlock, amongst others. Towards the end of the course, the focus shifted to distributed systems, and how you can ensure a system running on several isolated systems maintains integrity and avoids deadlock. The course involves learning how to write Promela code, and it's expected that you can learn how to use Java to a basic level on your own (though some resources were provided to get you started).