星空网 > 软件开发 > Java

[javaSE] 多线程通信(等待

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

 

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

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

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

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

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

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

 

 

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

 

[javaSE] 多线程通信(等待

 




原标题:[javaSE] 多线程通信(等待

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

跨境电商随记:https://www.goluckyvip.com/tag/9685.html
厦门菲律宾物流:https://www.goluckyvip.com/tag/96850.html
广州到菲律宾物流海运:https://www.goluckyvip.com/tag/96851.html
深圳至菲律宾物流:https://www.goluckyvip.com/tag/96852.html
菲律宾的货运代理:https://www.goluckyvip.com/tag/96854.html
散货到菲律宾海运:https://www.goluckyvip.com/tag/96855.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
中国有哪些著名的酒店品牌。:https://www.vstour.cn/a/411242.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流