The article you link mentions it. One of the usecases of the builder pattern is to create a complex immutable object. One you don't want to write a huge constructor for because there are just too many parameters.
While the builder is mutable and has setters like a bean - is therefore not threadsafe - the resulting object you build is. Objects that don't have mutable state can be shared across as many threads as you wish. Nothing can modify them, so nothing can read inconsistent state.
-> safe if you don't share the builder across threads and the resulting object is threadsafe. Threadsafety of the resulting object is by the way totally independent from the way you create it.
Is this pattern a good idea or is better to just have static methods in the class, keep it stateless and take all the parameters in the method itself.
Depends on how complex the creation of the object is. Stateless is always good but with just static
methods, how would you pass some sort of configuration for the alert? There must be some state somewhere to show it.