问题
I want to make my thread to wait for 30 minutes. Are there any problems of doing this?
回答1:
You can make your thread sleep for 30 minutes like this:
Thread.sleep(30 * // minutes to sleep
60 * // seconds to a minute
1000); // milliseconds to a second
Using Thread.sleep is not inherently bad. Simply explained, it just tells the thread scheduler to preempt the thread. Thread.sleep
is bad when it is incorrectly used.
- Sleeping without releasing (shared) resources: If your thread is sleeping with an open database connection from a shared connection pool, or a large number of referenced objects in memory, other threads cannot use these resources. These resources are wasted as long as the thread sleeps.
- Used to prevent race conditions: Sometimes you may be able to practically solve a race condition by introducing a
sleep
. But this is not a guaranteed way. Use a mutex. See Is there a Mutex in Java? As a guaranteed timer: The sleep time of
Thread.sleep
is not guaranteed. It could return prematurely with anInterruptedException
. Or it could oversleep.From documentation:
public static void sleep(long millis) throws InterruptedException
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.
You could also use, as kozla13 has shown in their comment:
TimeUnit.MINUTES.sleep(30);
回答2:
The answer of Krumia already perfectly shows how to sleep a running Thread
. Sometimes, the requirement to sleep or pause a thread originates from the wish to perform an operation at a later date. If that's the case, you should better use a higher level concept like Timer
or ScheduledExecutorService
:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(operation, 30, TimeUnit.MINUTES);
Where operation
is the Runnable
you want to execute in 30 minutes.
Using a ScheduledExecutorService
, you can also execute operations periodically:
// start in 10 minutes to run the operation every 30 minutes
executor.scheduleAtFixedDelay(operation, 10, 30, TimeUnit.MINUTES);
来源:https://stackoverflow.com/questions/24879303/making-a-thread-to-sleep-for-30-minutes