多线程

sleep方法:

  • sleep方法使当前线程暂停执行指定的时间,然后继续执行。
  • 在线程休眠期间,它不会释放任何锁资源。
  • sleep方法主要用于控制线程的执行速度或等待某个条件成立。
Thread.sleep(5000); // 休眠5秒钟
复制代码
Thread t1 = new Thread(new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("线程1开始执行...");  
        try {  
            Thread.sleep(5000); // 线程1休眠5秒钟  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
        System.out.println("线程1执行结束...");  
    }  
});  
t1.start(); // 启动线程1
复制代码

wait方法:

  • wait方法是Object类的一个方法,因此任何对象都可以调用它。
  • wait方法使当前线程进入等待状态,并释放对象的锁,直到其他线程调用同一对象的notify()或notifyAll()方法来唤醒该线程。
  • wait方法通常用于线程间的协作和同步。
synchronized (lock) {  
    while (!condition) {  
        lock.wait(); // 等待其他线程满足条件后唤醒  
    }  
    // 执行任务  
}
复制代码
Object lock = new Object();  
  
Thread t1 = new Thread(new Runnable() {  
    @Override  
    public void run() {  
        synchronized (lock) {  
            while (true) {  
                try {  
                    lock.wait(); // 线程1等待其他线程唤醒它  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                System.out.println("线程1被唤醒,继续执行...");  
            }  
        }  
    }  
});  
  
Thread t2 = new Thread(new Runnable() {  
    @Override  
    public void run() {  
        synchronized (lock) {  
            System.out.println("线程2唤醒线程1...");  
            lock.notify(); // 线程2唤醒线程1  
        }  
    }  
});  
t1.start(); // 启动线程1  
t2.start(); // 启动线程2
复制代码

线程1进入等待状态,并释放对象的锁。然后线程2获取到对象的锁,并调用lock.notify()方法唤醒线程1。这样,线程1就被唤醒,并继续执行。

posted @   Anne起飞记  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示