As nhydock said, you call update() each time you go through your game loop. No need for a separate thread.
I somehow have to send the graphics-Object from Player, to the actual Animation and exchange the Player-Graphic with the one from the animation.
How do I do this?
Wouldn't you just use the current x/y position of the player object to determine where to render the Image returned by getFrame()? The actual player class could contain a "current state" variable (i.e. running, idle, jumping) and a "state start time" variable that's used to retrieve the correct animation and the correct frame respectively. To get the delta to pass to the animation's update() method each iteration of your game loop, subtract the "state start time" from the current system time. There's really no need to store an actual Image/graphic in the player object.
@nhydock: The for loop is needed for cases where update() may be called at an inconsistent rate. If your delay between updates is too long, then it's possible that you may have to skip a frame or more of the current animation. The for loop will keep going forward through the animation frames until it finds the one that's supposed to be shown at the "currentTime" interval.