sleep方法的使用

/ 多线程 / 没有评论 / 277浏览

我们在开发多线程程序时,难免有这样的需求就是希望我们的程序可以暂停一下,等过一会儿在执行,具体的业务例如向队列中存放消息,当队列中的数据量达到一定数量时,我们就不在向队列里存储消息了,我们要等队列的消费者处理,当它将队列里的消息已经消费的差不多时我们在重新存放消息。

/**
* 消息生产者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:31
* @since 1.0.0
*/
public class MessageServer implements Runnable {


private List<Object> messages = Collections.synchronizedList(new ArrayList<Object>());

@Override
public synchronized void run() {
while (true) {
if (messages.size() >= 5) {
try {
System.out.println("消息服务的消息太多了休息10");
for (int i = 10; i > 0; i--) {
System.out.println(String.format("倒计时:%s", i));
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
messages.add(new Object());
System.out.println(String.format("消息服务中已有消息:%s 条 当前线程:%s", messages.size(), Thread.currentThread().getName()));
}
}
}
/**
* 消息消费者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:41
* @since 1.0.0
*/
public class MessageClient {
public static void main(String[] args) {
MessageServer messageServer = new MessageServer();
Thread thread1 = new Thread(messageServer);
thread1.start();
}
}
消息服务中已有消息:1 条 当前线程:Thread-0
消息服务中已有消息:2 条 当前线程:Thread-0
消息服务中已有消息:3 条 当前线程:Thread-0
消息服务中已有消息:4 条 当前线程:Thread-0
消息服务中已有消息:5 条 当前线程:Thread-0
消息服务的消息太多了休息10秒
倒计时:10
倒计时:9
倒计时:8
倒计时:7
倒计时:6
倒计时:5
倒计时:4
倒计时:3
倒计时:2
倒计时:1
消息服务中已有消息:6 条 当前线程:Thread-0
消息服务的消息太多了休息10秒

sleep()方法的单位是毫秒因为我在for循环中写的目的就是每1秒输出一次信息,当循环执行完时,run()方法正好暂停了10秒。上述代码只是为了演示方便,正常开发时直接在sleep()方法中写上在暂停的时间即可。

/**
* 消息生产者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:31
* @since 1.0.0
*/
public class MessageServer implements Runnable {


private List<Object> messages = Collections.synchronizedList(new ArrayList<Object>());

@Override
public synchronized void run() {
while (true) {
if (messages.size() >= 5) {
try {
System.out.println("消息服务的消息太多了休息10");
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
messages.add(new Object());
System.out.println(String.format("消息服务中已有消息:%s 条 当前线程:%s", messages.size(), Thread.currentThread().getName()));
}
}
}
消息服务中已有消息:1 条 当前线程:Thread-0
消息服务中已有消息:2 条 当前线程:Thread-0
消息服务中已有消息:3 条 当前线程:Thread-0
消息服务中已有消息:4 条 当前线程:Thread-0
消息服务中已有消息:5 条 当前线程:Thread-0
消息服务的消息太多了休息10秒        
消息服务中已有消息:6 条 当前线程:Thread-0
消息服务的消息太多了休息10秒

程序暂停10秒后向消息服务中添加第6条信息。