I often find these terms being used in context of concurrent programming . Are they the same thing or different ?
No, they are different & neither of them is a subset of one or vice-versa.
The term race condition is often confused with the related term data race, which arises when synchronization is not used to coordinate all access to a shared nonfinal field. You risk a data race whenever a thread writes a variable that might next be read by another thread or reads a variable that might have last been written by another thread if both threads do not use synchronization; code with data races has no useful defined semantics under the Java Memory Model. Not all race conditions are data races, and not all data races are race conditions, but they both can cause concurrent programs to fail in unpredictable ways.
Taken from the excellent book - Java Concurrency in Practice by Joshua Bloch & Co.