博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义...
阅读量:7113 次
发布时间:2019-06-28

本文共 2865 字,大约阅读时间需要 9 分钟。

最显著的应用当然是银行存款和取款,不要存在存取数字和实际发生不一样的情况。

synchronized关键字。
class BankAccount {    private int balance = 100;    public int getBalance() {        return balance;    }    public void withdraw(int amount) {        balance = balance - amount;    }}public class RyanAndMonicaJob implements Runnable {    private BankAccount account = new BankAccount();    public static void main(String[] args) {        // TODO Auto-generated method stub        RyanAndMonicaJob theJob = new RyanAndMonicaJob();        Thread one = new Thread(theJob);        Thread two = new Thread(theJob);        one.setName("Ryan");        two.setName("Monica");        one.start();        two.start();    }    public void run() {        for (int x = 0; x < 10; x++) {            makeWithdrawal(10);            if (account.getBalance() < 0) {                System.out.println("Overdrawn!");            }        }    }    private synchronized void makeWithdrawal(int amount) {        if (account.getBalance() >= amount) {            System.out.println(Thread.currentThread().getName() + " is about to withdraw");            try {                System.out.println(Thread.currentThread().getName() + " is going to sleep");                Thread.sleep(500);            } catch (InterruptedException ex) {                ex.printStackTrace();            }            System.out.println(Thread.currentThread().getName() + " woke up.");            account.withdraw(amount);            System.out.println(Thread.currentThread().getName() + " completes the withdrawl");        } else {            System.out.println("Sorry, not enough for " + Thread.currentThread().getName());        }            }}

Ryan is about to withdraw

Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Ryan is about to withdraw
Ryan is going to sleep
Ryan woke up.
Ryan completes the withdrawl
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica

转载地址:http://ijghl.baihongyu.com/

你可能感兴趣的文章
webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明
查看>>
热修改 MySQL 数据库 pt-online-schema-change 的使用详解
查看>>
Android调试优化篇
查看>>
Linux技巧汇总
查看>>
EF框架step by step(8)—Code First DataAnnotations(2)
查看>>
MySQL 若干操作
查看>>
Apache Rewrite规则详解
查看>>
JSON 之JAVA 解析
查看>>
MVC5网站开发之一 总体概述
查看>>
windows编程之菜单操作
查看>>
关键路径法
查看>>
Java并发编程:线程和进程的创建(转)
查看>>
【转】如何利用logrotate工具自动切分滚动中的日志文件
查看>>
视频摘要视频浓缩
查看>>
wow.js使用方法
查看>>
ContentPlaceHolderID属性
查看>>
源码安装Memcached服务器及其2种PHP客户端
查看>>
大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
查看>>
QT 对话框一
查看>>
mysql加密函数
查看>>