variables with UPROPERTY attribute cannot be decleared as "volatile"?

The volatile keyword doesn’t make your variable thread safe at all. You need to use other mechanisms to do that. volatile will only assure that if some hardware wrote to that memory that you will see that change when you read the variable.