银行转账JAVA异常_Java多线程银行转账,同步问题
我正在尝试多线程银行转账问题。但是,我遇到了正确同步线程的问题。定期在线程执行账户之间的转账后,它将进行测试以确保没有钱获得或完全损失。Java多线程银行转账,同步问题
当一个线程进入测试方法时,它应该设置一个标志,以防止任何其他线程进入传输方法,然后等待所有当前正在执行的线程传输结束。
public void transfer(int from, int to, int amount) {
//finish running all threads' current transactions before test
accounts[from].waitForAvailableFunds(amount);
if (!open) return;
//checks to see if any thread is currently testing
//if so, wait
while(flag) {
try {
wait();
} catch (InterruptedException e) { /*ignore*/ }
}
//do not execute these two statements when a thread
//is performing a test
if (accounts[from].withdraw(amount)) {
accounts[to].deposit(amount);
}
if (shouldTest() && !flag) test();
}
//only one thread can perform a test at any given moment
public synchronized void test() {
//when test starts set a flag telling threads to
//not begin any new transfers
flag = true;
//wait for all threads currently performing transfers
//to finish current transfer before continuing
int sum = 0;
for (int i = 0; i < accounts.length; i++) {
System.out.printf("%s %s%n",
Thread.currentThread().toString(),accounts[i].toString());
sum += accounts[i].getBalance();
}
System.out.println(Thread.currentThread().toString() +
" Sum: " + sum);
if (sum != numAccounts * initialBalance) {
System.out.println(Thread.currentThread().toString() +
" Money was gained or lost");
System.exit(1);
} else {
System.out.println(Thread.currentThread().toString() +
" The bank is in balance");
}
//reset flag and notify threads test is complete.
flag = false;
notifyAll();
}
首先,我甚至不积极我已经设置了标志并正确等待。其次,如何让进入测试方法的线程等待所有其他正在执行传输的线程完成当前传输。
感谢
银行转账JAVA异常_Java多线程银行转账,同步问题相关推荐
- java登录时启动后台异步线程_JAVA多线程的同步和 异步
原标题:JAVA多线程的同步和 异步 1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是 ...
- java 高效的多线程同步_java多线程的同步和异步
java多线程的同步和异步 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算 ...
- 开课吧Java课堂:多线程如何同步?消息如何传递?
同步性 因为多线程在你的程序中引入了一个异步行为,所以在你需要的时候必须有加强同步性的方法.举例来说,如果你希望两个线程相互通信并共享一个复杂的数据结构,例如链表序列,你需要某些方法来确保它们没有相互 ...
- java 异常_Java 进阶之异常处理
本文的主要内容分为 Java 异常的定义.Java 异常的处理.JVM 基础知识(异常表.JVM 指令分类和操作数栈)及深入剖析 try-catch-finally 四部分(图解形式).在深入剖析 t ...
- java异常_Java的异常体系
保证程序的健壮性 java异常体系 error:比如栈内存溢出(StackOverError) Exception这种异常又分为两类:运行时异常和编译异常. 1.运行时异常(逻辑异常):代码不规范引起 ...
- java同步与死锁_Java多线程 - 线程同步与死锁
一.线程同步 1)模拟多个用户同时从银行账户里面取钱 ● Account 类:银行账户类,里面有一些账户的基本信息,以及操作账户信息的方法 //模拟银行账户 classAccount {private ...
- java 多线程异常_java多线程执行异常
循环次数只有十次,执行的速度太快了,几乎可以忽略不计了,这正好说明了主线程直接先执行,然后Thread启动了run方法其次执行的道理,如果你想看到更真实的效果我建议你在线程中添加延迟,这样可以看的更加 ...
- java 多线程的同步问题_java多线程解决同步问题的几种方式,原理和代码
wait()/notify()方法 await()/signal()方法 BlockingQueue阻塞队列方法 PipedInputStream/PipedOutputStream 阻塞队列的一个简 ...
- java厨房_Java多线程基础
目录: 进程和线程 为什么使用多线程? 多线程的创建方式 Runnable与Thread两种方式比较 start()与run()方法 线程的生命周期/状态转换 常用方法使用与解读 线程的优先级 守护线 ...
- java丐帮_java多线程学习笔记(二)
上一节讲到多线程的创建,两种创建方式一种继承Thread类,一种实现Runnable接口: 常用的多线程函数: currentThread()方法 返回代码段正在被哪个线程调用的信息 i ...
最新文章
- 激光雷达 win10
- python json数据格式数组内元素递增赋值_python深浅复制,类型转换, json操作,数组操作...
- Java程序员如何运用所掌握的技术构建一个完整的业务架构
- junit 参数化测试用例_JUnit:在参数化测试中命名单个测试用例
- VS Code 调试 PHP有关配置
- 监督学习之knn、naive bayes、决策树算法实验_机器学习基本概念
- jquerymobile在手机上很小_手机如何建立自己的网站
- iOS 修改webView字体
- 深度学习计算机视觉高级图片标注工具SmartTool介绍
- 离职通知邮件主题写什么好_辞职信邮件主题.doc
- 可用性及测试方法小介绍
- c++实现简易trpg角色生成器
- AngelScript -- C++程序最好的脚本语言
- 矩阵笔记1:矩阵分析(第三版)-史荣昌-第一章:线性空间和线性变换
- IIS通过共享文件夹发布aspx程序站点(部分为原创)
- springboot maven打包运行失败问题debug分析报告——XXX--1.0-SNAPSHOT.jar中没有主清单属性
- 无法连接到internet 小黄叹号长时间不消失的问题
- 基于粒子群优化的MPPT控制
- R语言中dim函数_R语言 常见函数知识点梳理与解析 | 精选分析
- linux使用usb刻录光驱,linux光驱刻录
热门文章
- 【高等数学】多元函数f(x,y...)的泰勒(Taylor)展开式
- 【车道线】车道线检测代码复现---lanenet(小白篇)
- delphi(注入)附部分源代码
- 条件语句与循环语句:将数字一二三四五六七八九十转化成汉字大写的壹, 贰,叁,肆,伍,陆,柒,捌,玖,拾
- Web/前端性能优化
- Maven实战 PDF 许晓斌
- Java菜鸟教程 一些简单的练习
- error: ‘for‘ loop initial declarations are only allowed in C99 mode
- 未来教育 ***java二级考试题库第二十五套错题***
- 电脑模拟收银机_模拟超市的收银系统