1. 首页
  2. 开发语言
  3. Java

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秒");
                    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条信息。

原创文章,作者:二十四分之七倍根号六,如若转载,请注明出处:http://jilinwula.com/52.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

邮件:admin@jilinwula.com

QQ:923505769

 

QR code