Token Generator Using Threads
Bug 1

Requirement is 'without producing any duplicates'. You have not exactly implemented this (although the chances of happening are really small)

Bug 2

You have no condition of exiting. The program will run forever, and might have inconsistent behaviour if you terminate it externally.  

A: Is this an efficient way of generating the tokens?

It can be more efficient. 


You can keep the File and Writers open instead of opening each time.
You can reuse the new Random() instead of creating one each time, or..
...use int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
You can use a fixed for loop instead of checking the salt.length().


Also use try-with-resources.

B: How can I call this method using threads to generate them faster

As you write to file, this process will finally be I/O bound, so there is probably no real gain from multi-threading.