AbstractDocument has an insertString() method that is documented to be thread-safe, and I think that using it is probably the way to go.
So what you do is, in the EDT, save a reference to the underlying
Document.
Document
doc = myJTextArea.getDocument();
assert( doc instanceof AbstractDocument ); // optional (It will be, unless you're doing something unusual.)
Then just call
doc.insertString(doc.getLength(), stringToBeInserted, null);
from arbitrary threads and things should be fine.
Now the thread-safety doesn't come free. The insertString() method will acquire a write lock, which in some circumstances can be slow. If the text is coming fast and furious then it might make sense to do some batching. But I'd try it without first and see how it performs.