A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 825176857 中级黑马   /  2015-7-15 22:31  /  180 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[1].[代码] 多线程访问共享数据 [url=]跳至[/url] [1][size=1em][backcolor=rgb(108, 226, 108) !important]
[color=white !important][size=1em]?

[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]}




1 个回复

倒序浏览
  1. /**
  2. * 多线程模拟一个存 一个取,存完通知另一个来取
  3. */
  4. public class ImitateDepositDrawTheadTest {
  5.      
  6.     public static void main(String[] args) {
  7.          
  8.         final DepositOrWithdrawBusiness business = new DepositOrWithdrawBusiness(1000);
  9.         new Thread(new Runnable(){
  10.             @Override
  11.             public void run() {
  12.                 while(true){
  13.                     business.deposit();
  14.                 }
  15.             }
  16.         }).start();
  17.         new Thread(new Runnable(){
  18.             @Override
  19.             public void run() {
  20.                 while(true){
  21.                     business.withdraw();
  22.                 }
  23.             }
  24.         }).start();
  25.          
  26.          
  27.     }
  28. }
  29. class DepositOrWithdrawBusiness{
  30.     int balance = 1000;
  31.     public DepositOrWithdrawBusiness(int balance){
  32.         this.balance = balance;
  33.     }
  34.     boolean isWithdraw = false;
  35.     public synchronized void deposit(){
  36.         if(isWithdraw){
  37.             try {
  38.                 this.wait();
  39.             } catch (InterruptedException e) {
  40.                 e.printStackTrace();
  41.             }
  42.         }
  43.         balance = balance+300;
  44.         System.out.println(Thread.currentThread().getName()+ " deposit $300,now balance:" + balance);
  45.         isWithdraw=true;
  46.         this.notify();
  47.          
  48.     }
  49.     public synchronized void withdraw(){
  50.         if(!isWithdraw){
  51.             try {
  52.                 this.wait();
  53.             } catch (InterruptedException e) {
  54.                 e.printStackTrace();
  55.             }
  56.         }
  57.         balance = balance-300;
  58.         System.out.println(Thread.currentThread().getName()+ " withdraw $300,now balance:" + balance);
  59.         isWithdraw=false;
  60.         this.notify();
  61.     }
  62. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马