目的:练习JAVA多线程锁的机制。
题目要求:假设某银行服务器内存储了1000块钱的数据信息,现有两台ATM同时取款,一个取800,一个取700,用多线程解决同时取款的问题
这里贴出我写的源代码(其实是网上资料,自己复习用)
/**
* 银行账户类
* @author 刘峰
*
*/
public class Account {
private float balance = 1000;
public float getBalance() {
return balance;
}
public void setBalance(float balance) {
this.balance = balance;
}
/**
* 取款(同步)
* @param money
* author by 刘峰
* 2010-6-21下午04:43:45
*/
public synchronized void withdraw(float money){
if(balance >= money){
System.out.println("被取走"+money+"元");
try{
Thread.sleep(1000);
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//扣钱
balance -= money;
}else{
System.out.println("对不起,余额不足!");
}
}
}
/**
* ATM1
* @author 刘峰
*
*/
public class TestAccount1 extends Thread {
private Account account;
public TestAccount1(Account account){
this.account = account;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public void run(){
System.out.println(this.getName() + "来取"+800+"块钱");
account.withdraw(800);
System.out.println("余额为:" + account.getBalance() + "元!");
}
}
/**
* ATM2
* @author 刘峰
*
*/
public class TestAccount2 extends Thread {
private Account account;
public TestAccount2(Account account){
this.account = account;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public void run(){
System.out.println(this.getName() + "来取"+700+"块钱");
account.withdraw(700);
System.out.println("余额为:" + account.getBalance() + "元!");
}
}
测试:
public class Test {
/**
* @param args
* author by 刘峰
* 2010-6-21下午04:55:11
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Account account = new Account();
TestAccount1 acc1 = new TestAccount1(account);
TestAccount2 acc2 = new TestAccount2(account);
acc1.start();
acc2.start();
}
}
输出到控制台的信息:
Thread-0来取800块钱
Thread-1来取700块钱
被取走700.0元
对不起,余额不足!
余额为:300.0元!
余额为:300.0元!
如果大家觉得两个线程不够用的话,可在上面代码优化,方便理解JAVA线程
分享到:
相关推荐
"简单银行存款取款,以及实现线程java源代码"这个项目旨在演示如何利用Java实现银行账户的基本操作——存款和取款,并通过线程实现并发执行。 首先,我们需要理解线程的概念。线程是程序中的执行流,每个线程都有...
本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 首先,我们要理解多线程的核心概念。在Java中,线程是程序执行的最小单位,每个线程都有自己的程序计数器、虚拟机...
java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料
Java多线程设计模式是Java编程中至关重要的一个领域,它涉及到如何在并发环境中高效、稳定地执行多个任务。在Java中,多线程可以提高应用程序的响应速度和整体性能,尤其是在处理I/O密集型或计算密集型任务时。本...
多线程则是在一个进程中创建多个执行流,它们共享同一块内存空间,资源利用率高,但数据同步和互斥问题更复杂。在Linux中,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束。线程间的同步互斥...
在Java编程中,多线程是一项关键特性,...总之,这个"JAVA多线程的一个带UI界面的例子"涵盖了Java多线程编程和GUI设计的核心概念,通过实际的代码示例,有助于开发者深入理解如何在实际应用中正确、高效地使用多线程。
在Java编程语言中,线程是程序执行的基本单元,它允许程序同时执行多个任务。Java提供了丰富的线程API,使得开发者能够轻松地创建、管理和控制线程。本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,...
总结起来,Java多线程同步是通过`synchronized`关键字实现的,它可以应用于方法或代码块,保证同一时刻只有一个线程能够执行特定的代码。通过合理使用同步机制,开发者可以有效地管理并发程序中的资源访问,避免数据...
使用Java多线程,实现模拟银行存款与取款操作的实例。
Java 多线程访问的经典例子,一个个代码 手动敲出,可以加深或理解 多线程访问 线程安全与同步的问题.
java语言,利用多线程编写的时钟程序源代码。仅供参考。
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
Java编写的多线程下载器是一个实用的工具,它利用Java编程语言的特性,特别是多线程和Swing库,来实现高效的文件下载功能。在这个项目中,开发者创建了一个用户友好的界面,允许用户自定义下载设置,如启用的线程数...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。...通过这些题目,你可以检验自己对Java多线程的理解程度,并通过解答参考答案来查漏补缺,进一步提升自己的编程能力。
本文旨在通过分析一个具体的案例——长途汽车售票系统的多线程同步机制实现,来探讨如何利用Java的多线程技术解决实际问题。 #### 二、多线程的基本概念 ##### 2.1 线程与进程的主要区别 1. **划分粒度**:线程的...
总的来说,这个"java多线程实例"是一个实用的学习资源,它展示了如何利用Java的多线程特性进行高效的网络下载,并通过合理的线程同步和文件操作来实现资源的合并。对于想要深入理解Java多线程和网络编程的开发者来说...
采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...
本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。 #### 核心知识点: 1. **多线程基础**:多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在...
通过对上述代码的分析可以看出,该方案充分利用了Java多线程技术的优势,通过预加载前一页的数据,大大提高了后续请求的响应速度。然而,在实际应用中还需要注意以下几点: - **线程池管理**:频繁地创建新线程可能...
本文将深入探讨Java多线程的核心概念,包括如何创建线程、线程优先级、线程组、线程同步以及线程间的通信,这些都是基于提供的源代码案例进行的讲解。 首先,创建线程主要有两种方式:通过实现Runnable接口或继承...