[size=1em]1 [size=1em]2 [size=1em]3 [size=1em]4 [size=1em]5 [size=1em]6 [size=1em]7 [size=1em]8 [size=1em]9 [size=1em]10 [size=1em]11 [size=1em]12 [size=1em]13 [size=1em]14 [size=1em]15 [size=1em]16 [size=1em]17 [size=1em]18 [size=1em]19 [size=1em]20 [size=1em]21 [size=1em]22 [size=1em]23 [size=1em]24 [size=1em]25 [size=1em]26 [size=1em]27 [size=1em]28 [size=1em]29 [size=1em]30 [size=1em]31 [size=1em]32 [size=1em]33 [size=1em]34 [size=1em]35 [size=1em]36 [size=1em]37 [size=1em]38 [size=1em]39 [size=1em]40 [size=1em]41 [size=1em]42 [size=1em]43 [size=1em]44 [size=1em]45 [size=1em]46 [size=1em]47 [size=1em]48 [size=1em]49 [size=1em]50 [size=1em]51 [size=1em]52 [size=1em]53 [size=1em]54 [size=1em]55 [size=1em]56 [size=1em]57 [size=1em]58 [size=1em]59 [size=1em]60 [size=1em]61 [size=1em]62 [size=1em]63 [size=1em]64 | [size=1em][size=1em]package thread; [size=1em]/** [size=1em] * 多线程模拟一个存 一个取,存完通知另一个来取 [size=1em] */ [size=1em]public class ImitateDepositDrawTheadTest { [size=1em] [size=1em] public static void main(String[] args) { [size=1em] [size=1em] final DepositOrWithdrawBusiness business = new DepositOrWithdrawBusiness(1000); [size=1em] new Thread(new Runnable(){ [size=1em] @Override [size=1em] public void run() { [size=1em] while(true){ [size=1em] business.deposit(); [size=1em] } [size=1em] } [size=1em] }).start(); [size=1em] new Thread(new Runnable(){ [size=1em] @Override [size=1em] public void run() { [size=1em] while(true){ [size=1em] business.withdraw(); [size=1em] } [size=1em] } [size=1em] }).start(); [size=1em] [size=1em] [size=1em] } [size=1em]} [size=1em]class DepositOrWithdrawBusiness{ [size=1em] int balance = 1000; [size=1em] public DepositOrWithdrawBusiness(int balance){ [size=1em] this.balance = balance; [size=1em] } [size=1em] boolean isWithdraw = false; [size=1em] public synchronized void deposit(){ [size=1em] if(isWithdraw){ [size=1em] try { [size=1em] this.wait(); [size=1em] } catch (InterruptedException e) { [size=1em] e.printStackTrace(); [size=1em] } [size=1em] } [size=1em] balance = balance+300; [size=1em] System.out.println(Thread.currentThread().getName()+ " deposit $300,now balance:" + balance); [size=1em] isWithdraw=true; [size=1em] this.notify(); [size=1em] [size=1em] } [size=1em] public synchronized void withdraw(){ [size=1em] if(!isWithdraw){ [size=1em] try { [size=1em] this.wait(); [size=1em] } catch (InterruptedException e) { [size=1em] e.printStackTrace(); [size=1em] } [size=1em] } [size=1em] balance = balance-300; [size=1em] System.out.println(Thread.currentThread().getName()+ " withdraw $300,now balance:" + balance); [size=1em] isWithdraw=false; [size=1em] this.notify(); [size=1em] } [size=1em]} |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |