zoukankan      html  css  js  c++  java
  • java 线程同步方法执行与唤醒实例

     账号提钱、存钱实例方法

    public class Account {
        private int balance;
        private int maxBalance;
        public Account(int balance)
        {
            this.balance=balance;
        }
        //同步方法  取钱 
        public synchronized void transferOut(int money) {
             //线程同步 
            //synchronized(this) {
            String theadName=Thread.currentThread().getName();
            if(balance>money) {
                try {
                    Thread.sleep(1);
                }catch(InterruptedException e ){
                    e.printStackTrace();
                }
                balance=balance-money;
                System.out.println(theadName+"转走:"+money+",余额:"+balance);
            }else {
                System.out.println(Thread.currentThread().getName()+"余额不足");
            }
    //        }
        }
        
           //同步方法  线程等待  存钱
            public synchronized void save(int money) {
                while(balance+money>maxBalance) {
                    try {
                        this.wait(); //线程等待
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                String theadName=Thread.currentThread().getName();
                balance=balance+money;
                System.out.println( "save "+money+"元"+" balance:"+balance);
                this.notifyAll();//唤醒其它线程
                
            }
              //同步方法  线程等待  存钱
            public synchronized void withdraw(int money) {
                while(money>balance) {
                    try {
                        this.wait(); //线程等待
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            
                balance=balance-money;
                System.out.println( "take "+money+"元"+" balance:"+balance);
                this.notifyAll();//唤醒其它线程
                
            }
    }

      测试方法

    public class Test {
    
        public static void main(String[] args) {
             
            
            Account account2=new Account(8000);
            Thread t1=new Thread(new TakeMoney(account2),"son1");
            Thread t2=new Thread(new TakeMoney(account2),"son2");
            t1.start();
            t2.start();
        }
    
    }
  • 相关阅读:
    shell:定时任务crontab
    shell:采集进程的cpu和内存利用率_随手记1
    临时记录
    python:numpy库和matplotlib库
    python:urllib:HTTPResponse对象的用法
    美国亚马逊图片打不开
    互联网协议
    range 和 xrange
    国内服务器的端口开放问题
    Mac上设置Chrome跨域
  • 原文地址:https://www.cnblogs.com/personblog/p/11703760.html
Copyright © 2011-2022 走看看