I can't think of any example of a program that must use threads. Any program that you make with multiple threads could instead be made with one
thread. However, there are many situations where it is more appropriate to use multiple threads.(Some good examples are given in Dave's post above.)
It is like the decision to use loops or recursion. Any algorithm can be implemented using either, but there are some situations where one works out better than the other.