博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程(三)
阅读量:6440 次
发布时间:2019-06-23

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

hot3.png

package com.ninemax.application.multithread;public class FetchMoneyTest {		public static void main(String[] args) {				Bank bank = new Bank();		Thread t1 = new MoneyThread(bank);// 从银行取钱		Thread t2 = new MoneyThread(bank);// 从取款机取钱		t1.start();		t2.start();	}}class Bank {		private int money = 1000;	public synchronized int getMoney(int number) {		if (number < 0) {			return -1;		} else if (number > money) {			return -2;		} else if (money < 0) {			return -3;		} else {			try {				Thread.sleep(1000);			} catch (InterruptedException e) {				e.printStackTrace();			}			money -= number;			System.out.println("Left Money: " + money);						return number;		}	}}class MoneyThread extends Thread {		private Bank bank;	public MoneyThread(Bank bank) {		this.bank = bank;	}	@Override	public void run() {		System.out.println(bank.getMoney(800));	}}

运行结果:

Left Money: 200800-2

如果方法没有加synchronized关键字,运行结果:

Left Money: -600800Left Money: -600800

上面结果是因为在第一个线程sleep的时候,第二个线程也访问到了相同的资源,所以需要在方法上锁,才能同步.

转载于:https://my.oschina.net/Tsher2015/blog/682749

你可能感兴趣的文章
htm、html、shtml网页区别
查看>>
SpringCloud学习笔记:服务注册与发现Eureka(2)
查看>>
学习新 api 的思考过程 4.18
查看>>
想要设计自己的微服务?看这篇文章就对了
查看>>
[译] 原生 JavaScript 值得学习吗?答案是肯定的
查看>>
29岁了还一事无成是人生的常态?
查看>>
gRPC-rs:从 C 到 Rust
查看>>
Mysql-高性能索引
查看>>
chrome浏览器最小字号解决方案
查看>>
富文本编译器UEditor+SSM的使用
查看>>
Java EE之旅02 CSS基础
查看>>
kubernetes学习笔记 (二):k8s初体验
查看>>
swift3 0 流控制
查看>>
Data-Mediator专题之属性回调
查看>>
每天一个Linux命令之ps-查看系统进程信息
查看>>
图解JavaScript原型链继承
查看>>
用VIPER构建iOS应用
查看>>
Java开源诊断工具 Arthas 发布v3.1.0
查看>>
什么是以太坊
查看>>
高效开发者是如何个性化VS Code插件与配置的?
查看>>