First, java source file is compiled by java compiler. Java compiler coverts java source code into bytecode which is an intermediate language.
Then bytecode is interpreted by JVM (Java virtual machine). In few cases, bytecode is compiled by JIT (Just-In-Time) compiler.
Multithreaded
A thread is a piece of program that can run simultaneously with other parts of the program.
Java provides this facility to programmer.
A program can be written with multiple threads and each thread is running simultaneously other threads.
Using multithreading, Java supports multiprogramming and multitasking.
High performance
Java bytecode can be easily translated directly into machine code by JVM (Java Virtual Machine)/ JIT (Just-In-Time). It gives high performance to Java code.
Architecture-neutral
Goal of java language is “Write once, run anywhere". Java Virtual Machine (JVM) accomplishes this task. Therefore, java is architectural-neutral
Dynamic
Java is able to access objects at run-time.
Distributed
Java also supports Remote Method Invocation (RMI). It allows access of a method from anywhere. You may call method from the network.