It can blink at the rate specified by the BlinkRate property. This implementation expects two sources of asynchronous notification. The timer thread fires asynchronously, and causes the caret to simply repaint the most recent bounding box. The caret also tracks change as the document is modified. Typically this will happen on the event thread as a result of some mouse or keyboard event.
Updates can also occur from some other thread mutating the document.
There is a property AsynchronousMovement that determines if the caret will move on asynchronous updates. The default behavior is to not update on asynchronous updates. If asynchronous updates are allowed, the update thread will fire the caret position change to listeners asynchronously. The repaint of the new caret location will occur on the event thread in any case, as calls to modelToView are only safe on the event thread. The caret acts as a mouse and focus listener on the text component it has been installed in, and defines the caret semantics based upon those events.