It is still thread safe because you're only accessing to the field. The problem will be if some thread will try to modify the field (its state or change the whole object reference) while other threads are getting the value of this variable at the same time.
Usually, you create a class that implements Runnable and pass the necessary arguments:
class MyTask implements Runnable {
private final String needThis;
public MyTask(String needThis) {
this.needThis = needThis;
}
@Override
public void run() {
//do your task using needThis variable here...
}
}
This can be applied for other kind of arguments as well. Also, it is better to send object references of immutable classes (like String) as data for your threads.