`

JAVA多线程的一个复习例子(取款同步)(希望大家不要看源代码,看题目自己写出实现)

阅读更多
    目的:练习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线程



分享到:
评论
3 楼 sd6292766 2013-05-14  
ribavnu 写道
线程锁。
求楼主继续霸气啊,来个把钱存到数据库的,然后数据库实现存取的。

JDBC自己学着弄吧。不放心的话,可以用HIBERNATE,用乐观锁控制下。复杂点的,做成异步去处理。第二个线程进去,一定会查看到最新信息。
2 楼 ribavnu 2013-05-10  
线程锁。
求楼主继续霸气啊,来个把钱存到数据库的,然后数据库实现存取的。
1 楼 eddie_520 2012-09-20  
                                                                    
必须的,这帖子,学知识!

相关推荐

    简单银行存款取款,以及实现线程java源代码

    "简单银行存款取款,以及实现线程java源代码"这个项目旨在演示如何利用Java实现银行账户的基本操作——存款和取款,并通过线程实现并发执行。 首先,我们需要理解线程的概念。线程是程序中的执行流,每个线程都有...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 首先,我们要理解多线程的核心概念。在Java中,线程是程序执行的最小单位,每个线程都有自己的程序计数器、虚拟机...

    java多线程同步例子

    java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料

    Java多线程设计模式源代码

    Java多线程设计模式是Java编程中至关重要的一个领域,它涉及到如何在并发环境中高效、稳定地执行多个任务。在Java中,多线程可以提高应用程序的响应速度和整体性能,尤其是在处理I/O密集型或计算密集型任务时。本...

    linux上实现多进程和多线程实现同步互斥(源代码)

    多线程则是在一个进程中创建多个执行流,它们共享同一块内存空间,资源利用率高,但数据同步和互斥问题更复杂。在Linux中,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束。线程间的同步互斥...

    JAVA多线程的一个带UI界面的例子

    在Java编程中,多线程是一项关键特性,...总之,这个"JAVA多线程的一个带UI界面的例子"涵盖了Java多线程编程和GUI设计的核心概念,通过实际的代码示例,有助于开发者深入理解如何在实际应用中正确、高效地使用多线程。

    JAVA线程学习(源代码)

    在Java编程语言中,线程是程序执行的基本单元,它允许程序同时执行多个任务。Java提供了丰富的线程API,使得开发者能够轻松地创建、管理和控制线程。本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,...

    Java多线程同步具体实例讲解 .doc

    总结起来,Java多线程同步是通过`synchronized`关键字实现的,它可以应用于方法或代码块,保证同一时刻只有一个线程能够执行特定的代码。通过合理使用同步机制,开发者可以有效地管理并发程序中的资源访问,避免数据...

    Java多线程实现银行存款与取款线程

    使用Java多线程,实现模拟银行存款与取款操作的实例。

    Java 多线程访问的经典例子.txt

    Java 多线程访问的经典例子,一个个代码 手动敲出,可以加深或理解 多线程访问 线程安全与同步的问题.

    java多线程时钟程序源代码

    java语言,利用多线程编写的时钟程序源代码。仅供参考。

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    Java编写的多线程下载器源代码

    Java编写的多线程下载器是一个实用的工具,它利用Java编程语言的特性,特别是多线程和Swing库,来实现高效的文件下载功能。在这个项目中,开发者创建了一个用户友好的界面,允许用户自定义下载设置,如启用的线程数...

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。...通过这些题目,你可以检验自己对Java多线程的理解程度,并通过解答参考答案来查漏补缺,进一步提升自己的编程能力。

    Java多线程同步机制在售票系统的实现

    本文旨在通过分析一个具体的案例——长途汽车售票系统的多线程同步机制实现,来探讨如何利用Java的多线程技术解决实际问题。 #### 二、多线程的基本概念 ##### 2.1 线程与进程的主要区别 1. **划分粒度**:线程的...

    java多线程实例 代码可执行 绝对开源

    总的来说,这个"java多线程实例"是一个实用的学习资源,它展示了如何利用Java的多线程特性进行高效的网络下载,并通过合理的线程同步和文件操作来实现资源的合并。对于想要深入理解Java多线程和网络编程的开发者来说...

    (Java)FTP多线程下载源代码

    采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...

    java 多线程操作数据库

    本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。 #### 核心知识点: 1. **多线程基础**:多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在...

    java多线程分页查询

    通过对上述代码的分析可以看出,该方案充分利用了Java多线程技术的优势,通过预加载前一页的数据,大大提高了后续请求的响应速度。然而,在实际应用中还需要注意以下几点: - **线程池管理**:频繁地创建新线程可能...

    javaSE多线程的案例源代码

    本文将深入探讨Java多线程的核心概念,包括如何创建线程、线程优先级、线程组、线程同步以及线程间的通信,这些都是基于提供的源代码案例进行的讲解。 首先,创建线程主要有两种方式:通过实现Runnable接口或继承...

Global site tag (gtag.js) - Google Analytics