`

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中,多线程可以提高应用程序的响应速度和整体性能,尤其是在处理I/O密集型或计算密集型任务时。本...

    java实现多线程间的同步与互斥(读者写者问题)

    用java实现多线程并发中的读者与写者问题,能够实现多线程对临界资源的同步有序访问。 具体实现为: 给定一个队列A[1-10][1-100000]、元素编号1-10,其中每个元素包含10万个随机数。创建若干个线程,各循环100次;...

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

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

    JAVA 线程实现数据库的主从同步更新

    在Java编程环境中,...总之,使用Java线程实现数据库主从同步更新是一种常见且实用的技术手段,它涉及到多线程编程、数据库操作、事务管理等多个方面。理解和掌握这些知识点对于开发高可用性的分布式系统至关重要。

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

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

    JAVA线程学习(源代码)

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

    JAVA实现线程间同步与互斥生产者消费者问题

    在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...

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

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

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

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

    时钟:java多线程写的源代码

    用java多线程模拟一个简单的时钟程序,希望大家提出宝贵意见。

    java多线程时钟程序源代码

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

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

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

    Java多线程练习题

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

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

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

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

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

    java 多线程同步方法的实例

    在Java编程语言中,多线程同步是一种控制多个线程并发执行的重要机制,它确保了共享资源的安全访问,防止数据不一致性和竞态条件的发生。本文将深入探讨Java中的多线程同步方法,并通过实例来阐述其工作原理。 首先...

    java 多线程操作数据库

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

    java多线程分页查询

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

Global site tag (gtag.js) - Google Analytics