当前位置:网站首页>Use of thread communication

Use of thread communication

2022-06-12 15:18:00 A_ M amu

package demo06;

/**
 * @program: Thread01
 * @description:
 * @author:  Amur 
 * @create: 2022-01-05 11:10
 **/
public class Test01 {
    public static void main(String[] args) {
        BankCard card=new BankCard(0);

        TakeMoney takeMoney=new TakeMoney(card);
        SaveMoney saveMoney=new SaveMoney(card);

        Thread t1=new Thread(saveMoney," Zhang San ");
        Thread t2=new Thread(takeMoney," Li Si ");
        t1.start();
        t2.start();
    }
}
class TakeMoney implements  Runnable{
    private BankCard bankCard;
    public TakeMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.takeMoney(1000);
        }
    }
}
class SaveMoney implements  Runnable{
    private BankCard bankCard;
    public SaveMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.saveMoney(1000);
        }
    }
}
class BankCard {
    private double balance;
    private boolean flag = false;//flase: Said he had no money   true Means rich 

    public BankCard(double balance) {
        this.balance = balance;
    }

    // You must keep the card. There is no money in the card .
    public synchronized void saveMoney(double money) {
        if (flag == true) {
            try {
                this.wait();// Enter the waiting line 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        balance += money;
        System.out.println(Thread.currentThread().getName()+" Put... Into the card "+money+"; The balance in the card is :"+balance);
        flag=true; //
        this.notify();// Wake up the thread waiting on the queue 
    }

    public synchronized  void takeMoney(double money){
          if(flag==false){
              try {
                  this.wait();// Enter the waiting line 
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }

          balance-=money;
          System.out.println(Thread.currentThread().getName()+" Took it out of the card "+money+"; The balance in the card is :"+balance);
          flag=false;
          this.notify();
    }
}

Save more, get more .

package demo06;

/**
 * @program: Thread01
 * @description:
 * @author:  Amur 
 * @create: 2022-01-05 11:10
 **/
public class Test01 {
    public static void main(String[] args) {
        BankCard card=new BankCard(0);

        TakeMoney takeMoney=new TakeMoney(card);
        SaveMoney saveMoney=new SaveMoney(card);

        Thread t1=new Thread(saveMoney," Zhang San ");
        Thread t2=new Thread(takeMoney," Li Si ");
        Thread t3=new Thread(saveMoney," The king 2 ");
        Thread t4=new Thread(takeMoney," Pockmarks ");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class TakeMoney implements  Runnable{
    private BankCard bankCard;
    public TakeMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.takeMoney(1000);
        }
    }
}
class SaveMoney implements  Runnable{
    private BankCard bankCard;
    public SaveMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.saveMoney(1000);
        }
    }
}
class BankCard {
    private double balance;
    private boolean flag = false;//flase: Said he had no money   true Means rich 

    public BankCard(double balance) {
        this.balance = balance;
    }

    // You must keep the card. There is no money in the card .
    public synchronized void saveMoney(double money) {
        if (flag == true) {
            try {
                this.wait();// Enter the waiting line 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        balance += money;
        System.out.println(Thread.currentThread().getName()+" Put... Into the card "+money+"; The balance in the card is :"+balance);
        flag=true; //
        this.notify();// Wake up the thread waiting on the queue 
    }

    public synchronized  void takeMoney(double money){
          if(flag==false){
              try {
                  this.wait();// Enter the waiting line 
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }

          balance-=money;
          System.out.println(Thread.currentThread().getName()+" Took it out of the card "+money+"; The balance in the card is :"+balance);
          flag=false;
          this.notify();
    }
}

Solution : if Switch to while

package demo06;

/**
 * @program: Thread01
 * @description:
 * @author:  Amur 
 * @create: 2022-01-05 11:10
 **/
public class Test01 {
    public static void main(String[] args) {
        BankCard card=new BankCard(0);

        TakeMoney takeMoney=new TakeMoney(card);
        SaveMoney saveMoney=new SaveMoney(card);

        Thread t1=new Thread(saveMoney," Zhang San ");
        Thread t2=new Thread(takeMoney," Li Si ");
        Thread t3=new Thread(saveMoney," The king 2 ");
        Thread t4=new Thread(takeMoney," Pockmarks ");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class TakeMoney implements  Runnable{
    private BankCard bankCard;
    public TakeMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.takeMoney(1000);
        }
    }
}
class SaveMoney implements  Runnable{
    private BankCard bankCard;
    public SaveMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.saveMoney(1000);
        }
    }
}
class BankCard {
    private double balance;
    private boolean flag = false;//flase: Said he had no money   true Means rich 

    public BankCard(double balance) {
        this.balance = balance;
    }

    // You must keep the card. There is no money in the card .
    public synchronized void saveMoney(double money) {
        while (flag == true) {
            try {
                this.wait();// Enter the waiting line 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        balance += money;
        System.out.println(Thread.currentThread().getName()+" Put... Into the card "+money+"; The balance in the card is :"+balance);
        flag=true; //
        this.notify();// Wake up the thread waiting on the queue 
    }

    public synchronized  void takeMoney(double money){
          while(flag==false){
              try {
                  this.wait();// Enter the waiting line 
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }

          balance-=money;
          System.out.println(Thread.currentThread().getName()+" Took it out of the card "+money+"; The balance in the card is :"+balance);
          flag=false;
          this.notify();
    }
}

Solution : Use notifyAll Replace notify

package demo06;

/**
 * @program: Thread01
 * @description:
 * @author:  Amur 
 * @create: 2022-01-05 11:10
 **/
public class Test01 {
    public static void main(String[] args) {
        BankCard card=new BankCard(0);

        TakeMoney takeMoney=new TakeMoney(card);
        SaveMoney saveMoney=new SaveMoney(card);

        Thread t1=new Thread(saveMoney," Zhang San ");
        Thread t2=new Thread(takeMoney," Li Si ");
        Thread t3=new Thread(saveMoney," The king 2 ");
        Thread t4=new Thread(takeMoney," Pockmarks ");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class TakeMoney implements  Runnable{
    private BankCard bankCard;
    public TakeMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.takeMoney(1000);
        }
    }
}
class SaveMoney implements  Runnable{
    private BankCard bankCard;
    public SaveMoney(BankCard bankCard){
        this.bankCard=bankCard;
    }
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            bankCard.saveMoney(1000);
        }
    }
}
class BankCard {
    private double balance;
    private boolean flag = false;//flase: Said he had no money   true Means rich 

    public BankCard(double balance) {
        this.balance = balance;
    }

    // You must keep the card. There is no money in the card .
    public synchronized void saveMoney(double money) {
        while (flag == true) {
            try {
                this.wait();// Enter the waiting line 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        balance += money;
        System.out.println(Thread.currentThread().getName()+" Put... Into the card "+money+"; The balance in the card is :"+balance);
        flag=true; //
        this.notifyAll();// Wake up the thread waiting on the queue 
    }

    public synchronized  void takeMoney(double money){
          while(flag==false){
              try {
                  this.wait();// Enter the waiting line 
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
          balance-=money;
          System.out.println(Thread.currentThread().getName()+" Took it out of the card "+money+"; The balance in the card is :"+balance);
          flag=false;
          this.notifyAll();
    }
}

原网站

版权声明
本文为[A_ M amu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/03/202203010502355323.html