您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页代码证明使用wait()休眠的线程会释放锁,使用sleep()休眠的线程不会释放锁

代码证明使用wait()休眠的线程会释放锁,使用sleep()休眠的线程不会释放锁

来源:易妖游戏网

设计一个程序证明使用wait()休眠的线程会释放锁,使用sleep()休眠的线程不会释放锁

证明使用wait()休眠的线程会释放锁

 package proveWaitAndSleep;

import java.io.Serializable;

public class Animal implements Serializable {

    /**
     * 定义同步方法
     * 同步方法也会把方法内部的代码锁住
     * 只让一个线程执行
     */
    public synchronized void set() {
        System.out.println(Thread.currentThread().getName() + "线程调用了set方法");
        try {
            super.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public synchronized void get() {
        System.out.println(Thread.currentThread().getName() + "线程调用了get方法");
    }
}

//定义一个生产者
class Productor implements Runnable {
    private Animal animal;

    public Productor(Animal animal) {
        this.animal = animal;
    }

    @Override
    public void run() {
        this.animal.set();
    }
}

//定义一个消费者
class Customer implements Runnable {
    private Animal animal;

    public Customer(Animal animal) {
        this.animal = animal;
    }

    @Override
    public void run() {
        this.animal.get();
    }
}

class Client {
    public static void main(String[] args) {
        Animal animal = new Animal();
        new Thread(new Productor(animal)).start();
        new Thread(new Customer(animal)).start();
    }
}

证明sleep()休眠的线程不会释放锁


package proveWaitAndSleep;

import java.io.Serializable;

public class Animal implements Serializable {

    /**
     * 定义同步方法
     * 同步方法也会把方法内部的代码锁住
     * 只让一个线程执行
     */
    public synchronized void set() {
        System.out.println(Thread.currentThread().getName() + "线程调用了set方法");
        try {
//            super.wait();
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public synchronized void get() {
        System.out.println(Thread.currentThread().getName() + "线程调用了get方法");
    }
}

//定义一个生产者
class Productor implements Runnable {
    private Animal animal;

    public Productor(Animal animal) {
        this.animal = animal;
    }

    @Override
    public void run() {
        this.animal.set();
    }
}

//定义一个消费者
class Customer implements Runnable {
    private Animal animal;

    public Customer(Animal animal) {
        this.animal = animal;
    }

    @Override
    public void run() {
        this.animal.get();
    }
}

class Client {
    public static void main(String[] args) {
        Animal animal = new Animal();
        new Thread(new Productor(animal)).start();
        new Thread(new Customer(animal)).start();
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务