¿Para qué se utiliza AtomicLong en Java?

¿Alguien puede explicar para qué se utiliza AtomicLong? Por ejemplo, ¿cuál es la diferencia en las siguientes declaraciones?

private Long transactionId;
private AtomicLong transactionId;