ULID's initial segment is timestamp generated, with a random suffix at the end. This kind of collision you're concerned about is not an issue at all, across multi-threads, processes or hosts.
Not if the same ULID generator instance is used across threads.
Not if the same ULID generator instance is used across threads.