星空网 > 软件开发 > 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.ikjzd.com/articles/104732
纯干货:做亚马逊跟卖自家的产品应该如何操作?:https://www.ikjzd.com/articles/104733
案例分析:Listing全方位数据优化应该怎么做?:https://www.ikjzd.com/articles/104736
做外贸还两眼一抹黑?老外贸亲述,职业规划应该这么做!:https://www.ikjzd.com/articles/104737
外贸课堂:太过热情的我,把客户给弄丢了?:https://www.ikjzd.com/articles/104738
亚马逊误收费用,卖家怎么索赔?:https://www.ikjzd.com/articles/104739
永康白云风景区怎么走 白云山风景区怎么去??:https://www.vstour.cn/a/363181.html
2022世界杯门票如何买?:https://www.vstour.cn/a/363182.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流