Yes, you are correct about what is being locked on.
Meth2 is not synchronized, any other thread can call it at any time. Even if meth2 has been called from synchronized code (say, meth1 for example), any other thread can
still call meth2 any any time. In a nutshell, your code is not thread-safe.
Meth2 will be able to change x - why wouldn't it? x is in scope.
You could simply place a synchronized block inside meth2 (or declare the method synchronized), that would stop it updating x at the same time meth1 is running, but that may not be enough. It would still be possible for another thread to interfere between calls to meth1 and meth2. If that is a concern in your design,
you should place the calls to meth1 and meth2 inside a synchronized block as well.
Threading can be tricky to get right - the only thing to do is practice, practice, practice. And don't forget about wait(), notify() and notifyAll().
The K&B book has a good section on threading.