zoukankan      html  css  js  c++  java
  • 线程同步简单代码和Synchronized用法(待补充)

    ①有两个线程:会计和出纳,他俩共同拥有一个帐本 .程序要保证其中一人使用saveOrTake(int amount)时,另一个人将必须等待,即saveOrTake(int amount)方法应当是一个synchronized方法。

    运行效果:image

    代码如下:

    Bank类:

    public class Bank implements Runnable {
       int money=200;
       public void setMoney(int n) {
          money=n;
       }
       public void run() {
          if(Thread.currentThread().getName().equals("会计")) 
             saveOrTake(300);
          else if(Thread.currentThread().getName().equals("出纳"))
             saveOrTake(150);
       }
        public synchronized void saveOrTake(int amount) { //存取方法
          if(Thread.currentThread().getName().equals("会计")) {
             for(int i=1;i<=3;i++) { 
                 money=money+amount/3;      //每存入amount/3,稍歇一下
                 System.out.println(Thread.currentThread().getName()+
                                   "存入"+amount/3+",帐上有"+money+"万,休息一会再存");
                 try { Thread.sleep(1000);  //这时出纳仍不能使用saveOrTake方法 
                 }                       
                 catch(InterruptedException e){}
             }
          }
          else if(Thread.currentThread().getName().equals("出纳")) {
             for(int i=1;i<=3;i++) { //出纳使用存取方法取出60
                 money=money-amount/3;   //每取出amount/3,稍歇一下
                 System.out.println(Thread.currentThread().getName()+
                                   "取出"+amount/3+"帐上有"+money+"万,休息一会再取");
                 try { Thread.sleep(1000);       //这时会计仍不能使用saveOrTake方法
                 }                         
                 catch(InterruptedException e){}
             }
          }
       }
    }

    TestBank类:

    public class TestBank{
       public static void main(String args[]) {
          Bank bank = new Bank();
          bank.setMoney(200);
          Thread accountant,    //会计
                 cashier;      //出纳
          accountant = new Thread(bank);
          cashier = new Thread(bank);
          accountant.setName("会计");
          cashier.setName("出纳");
          accountant.start();
          cashier.start(); 
       }
    }

    ②Synchronized关键字用法:

    https://blog.csdn.net/weixin_41632656/article/details/79063503

    https://www.cnblogs.com/wl0000-03/p/5973039.html

    (本人比较懒,有时间一定总结出自己的来)

    天晴了,起飞吧
  • 相关阅读:
    display:inline、block、inline-block的区别
    CSS选择器优先级总结
    bootstarp模板01
    Vue深度学习(6)- 组件
    在Ubuntu下安装mongodb
    Ajax高级应用---Comet
    ubuntu安装
    linux使用
    跨浏览器的CORS
    防止伪造跨站请求
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/10975271.html
Copyright © 2011-2022 走看看