多线程

发布时间 2023-12-19 21:27:46作者: Anne起飞记

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就被唤醒,并继续执行。