[javaSE] 多线程通信(等待-唤醒机制)

[javaSE] 多线程通信(等待-唤醒机制),第1张

概述两个线程 *** 作同一个资源,比如,输入和输出, *** 作同一个对象,此时两个线程会争夺cpu的执行权,随机的进行切换。我们想实现先输入再输出,顺序的执行 目标对象定义一个标记字段,进行判断,wait()和not

两个线程 *** 作同一个资源,比如,输入和输出, *** 作同一个对象,此时两个线程会争夺cpu的执行权,随机的进行切换。我们想实现先输入再输出,顺序的执行

 

目标对象定义一个标记字段,进行判断,wait()notify()方法

wait()方法,线程会处于等待状态,等待的线程位于内存中的线程池中

notify()方法,唤醒线程池中的线程

notifyAll()方法,唤醒全部线程

上面的方法,需要写在同步里面,并且需要标识锁

这些 *** 作线程的方法定义在Object对象中,因为这些方法,要通过同一个锁对象来调用

 

 

/** * 资源 *  * @author taoshihan *  */class People {    String name;    String sex;    Boolean myLock = false;} * 输入 *  * class PeopleJoin implements Runnable {    private People resource;    public PeopleJoin(People resource) {        this.resource = resource;    }    @OverrIDe    public voID run() {        // 切换        boolean flag = true;        while () {            synchronized (resource) {                if (resource.myLock) {                    try {                        resource.wait();                    } catch (InterruptedException e) {                        e.printstacktrace();                    }                }                 (flag) {                    resource.name = "taoshihan";                    resource.sex = "nan";                } else {                    resource.name = "陶士涵";                    resource.sex = "男";                }                flag = !flag;                resource.myLock=;                resource.notify();            }        }    }} * 输出 *  * class PeopleOut  PeopleOut(People resource) {        if(!resource.myLock){                     (InterruptedException e) {                        e.printstacktrace();                    }                }                System.out.println(resource.name + "=====" + resource.sex);                resource.myLock= ThreadDemo {         * @param args     */    static  main(String[] args) {        People resource = new People();        PeopleJoin input =  PeopleJoin(resource);        PeopleOut output =  PeopleOut(resource);        Thread t1 =  Thread(input);        Thread t2 =  Thread(output);        t1.start();        t2.start();    }}

 

 

总结

以上是内存溢出为你收集整理的[javaSE] 多线程通信(等待-唤醒机制)全部内容,希望文章能够帮你解决[javaSE] 多线程通信(等待-唤醒机制)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1154501.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存