There are loads of answers on this, but it can be confusing. I like to think of it this way, and maybe it helps?:
Concurrent programming is code that does not care about the order of execution. Java is a poor language for concurrent programming, but there are libraries and frameworks to help. JavaScript is an excellent language for concurrent programming, and it's often difficult when you want to write something that isn't concurrent (e.g., if you want to force the order of execution). Concurrent programming is great for event-driven programming (where order of execution is determined by event listeners, like code running in your browser that acts when you click a button or type into a box).
An example would include creating a hundred HTTP requests. In NodeJS, the simplest solution is to open all 100 requests at once with a callback method, and when the responses come back, a method is executed each time. That's concurrent programming. In Ruby, the simplest (most common) solution is to open a request and handle the response, open the next request and handle the response, etc. For many requests, NodeJS is easier to do in a timely fashion, although you have to be careful to avoid hammering the server or maxing out your outbound connections (easy to do by mistake). You can write the Ruby in a concurrent way, but it's not how most Ruby code is written, and it hurts a little to do it.
Parallel programming is code that can be run simultaneously in multiple threads or processes. This allows you to optimise performance by running the code across multiple CPUs (often including multiple machines, as you might with something like Akka). Because NodeJS is not multi-threaded and there's no parallel execution, you don't have to worry about writing threadsafe code (and most JavaScript code I've seen is not threadsafe) . In Java, even though the language doesn't make concurrent programming the normal pattern, parallel programming is very much built in, and you do often have to worry about thread-safety. If you are writing a Website in Java, typically this will be run in a container that runs each request in a separate thread in the same memory, so anything shared across requests in memory (such as an in-memory cache or configuration) must be thread-safe.
Some of the above depends on the scope and boundaries you are talking about. I work on Websites. Most Java code I see is not concurrent programming. Sure, if you zoom out enough, the order that the customer requests come in is not important, but if you zoom in any further than that, the order that things are executed is dictated by the code. But the code is written so that the requests can execute in parallel with lots of shared objects that must be thread-safe.
Meanwhile, most JavaScript code I see is concurrent: it is written in way that the order of execution is unimportant at many levels. But it is not written to support parallel execution in shared memory. Sure, you can execute the same code in parallel across multiple processes, but the objects are not shared, so it is not parallel programming in any meaningful sense.
For additional reading, I do really like the illustrations in the top answer to this question here: https://www.quora.com/What-are-the-differences-between-parallel-concurrent-and-asynchronous-programming