Can volatile variable be defined as static in java?
Sure. The effects of the two modifiers are completely orthogonal.
To expand on Michael's comment.
static
simply means not associated with an instance of the containing class.
volatile
simply means that the value may be changed by other threads without warning.
So your question boils down to "can a field not associated with an instance of the containing class be changed by another thread without warning?"
As Michael pointed out, the answer to that question is yes. Instance association is orthogonal to concurrent modification.
Yes, you can.
A static
variable in Java is stored once per class (not once per object, such as non-static variables are). This means all your objects (and static methods) share the same variable.
Declaring a variable as volatile
(be it static
or not) states that the variable will be accessed frequently by multiple threads. In Java, this boils down to instructing threads that they can not cache the variable's value, but will have to write back immediately after mutating so that other threads see the change. (Threads in Java are free to cache variables by default).