欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > java >内容正文

java

java 转账 锁-ag凯发k8国际

发布时间:2024/10/8 java 1 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 java 转账 锁_java多线程 多个人转账发生死锁 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

java多线程 多个人转账发生死锁

java多线程 多个人转账发生死锁

文章目录多个人转账发生死锁

多个人转账发生死锁

人数多的时候, 依然会发生死锁, 遵循墨菲定律.

虽然人多的时候发生死锁的几率不高, 但是危害大.

此节的代码中, 需要用到上一节的代码, 链接如下.

https://javaweixin6.blog.csdn.net/article/details/108475207

此节的代码如下 :

定义账户的数组, 用于给不同的账户转账.

并且给每个账户赋初始值的钱为1000.

在transferthread内部类中继承了thread类, 重写run方法, 执行num_iterations次数的转账操作. 并且每次转账的收款方 , 转账方,转账金额都是随机的. 在run方法中调用transfermoney.transfermoney转账方法

接着开启num_threads个数(20个数)的线程去执行run方法中的任务

package com.thread.deadlock;

import java.util.random;

/**

* 类名称:multitransfermoney

* 类描述: 多人转账发生死锁demo

*

* @author: https://javaweixin6.blog.csdn.net/

* 创建时间:2020/9/9 7:13

* version 1.0

*/

public class multitransfermoney {

//账户的总数量

private static final int num_accounts = 500;

//每个账户初始的余额

private static final int num_money = 1000;

private static final int num_iterations = 1000000;

private static final int num_threads = 20;

public static void main(string[] args) {

random random = new random();

//定义转账的账户数组

transfermoney.account[] accounts = new transfermoney.account[num_accounts];

for (int i = 0; i < accounts.length; i ) {

//给每个账户数组中的元素定初始值

accounts[i] = new transfermoney.account(num_money);

}

class transferthread extends thread {

@override

public void run() {

//每一个线程都进行随机的转账

for (int i = 0; i < num_iterations; i ) {

//随机获取转账方索引

int fromaccount = random.nextint(num_accounts);

//随机的获取收款方

int toaccount = random.nextint(num_accounts);

//随机获取转账金额

int amount = random.nextint(num_money);

//执行转账的方法

transfermoney.transfermoney(accounts[fromaccount],accounts[toaccount],amount);

}

}

}

//开启20个线程进行转账

for (int i = 0; i < num_threads; i ) {

new transferthread().start();

}

}

}

运行程序后, 几秒钟之后, 就出现了死锁, 控制台的红色按钮一直亮着, 但也没再打印东西, 说明出现了死锁.

这也就说明了, 即使是用户量多,只要有发生死锁的风险,随着时间的推移, 就会出现死锁. 一旦发生 , 就是造成系统的崩溃, 严重影响了业务.

在业务开发中, 写的程序避免发生死锁,这样才是最可靠的.

java多线程 多个人转账发生死锁相关教程

总结

以上是ag凯发k8国际为你收集整理的java 转账 锁_java多线程 多个人转账发生死锁的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图