Escriba un programa Java, use la clase ThreadLocal, cree una clase de cuenta Cuenta en el proyecto, la clase incluye el nombre del nombre de la cuenta, la cantidad variable de referencia de la clase ThreadLocal, que significa depósito

Ver este capítulo

Ver directorio de trabajos


Declaración de necesidades:

Un usuario tiene dos tarjetas bancarias con el mismo nombre de cuenta pero diferentes números de tarjeta y saldos. Simula el proceso de consumo del usuario con estas dos tarjetas bancarias e imprime los detalles del consumo

Ideas de realización:

  1. Cree una clase de cuenta Cuenta en el proyecto. La clase incluye el nombre del nombre de la cuenta y la cantidad variable de referencia de la clase ThreadLocal, que significa depósito
  2. Cree una clase de consumidor DailyConsmption para implementar la interfaz Runnable. Declare la cuenta de referencia del tipo de cuenta, use new Random () para instanciar un objeto de clase aleatorio al azar y defina un método de construcción para inicializar la cuenta
  3. En el método de ejecución, llame al método de depósito setAmount del objeto de la cuenta, genere un número aleatorio para representar el monto del depósito, declare las variables de tipo doble consumo y saldo, que representan respectivamente el monto del consumo y el saldo de la tarjeta bancaria cada vez
  4. Utilice el bucle for para simular el consumo 5 veces para determinar si el saldo es mayor o igual a 0. Si el saldo es menor que 0, le indicará al usuario que el saldo es insuficiente y no es suficiente para este consumo, y el ciclo finaliza. Si el saldo es mayor o igual a 0, muestre los detalles del consumo (incluido el nombre de la cuenta, el nombre del hilo, el monto del consumo y el saldo de la tarjeta bancaria)
  5. Crea una clase de prueba, crea dos hilos para probar

Código de implementación:

Cuenta cuenta

public class Account {
	//账号名称
	private String name;
	//定义一个ThreadLocal类型的变量,该变量将是线程的局部变量,用来保存不同银行卡的存款
    private ThreadLocal<Double> amount = new ThreadLocal<>();
    //构造方法
	public Account() {
		super();
	}
	public Account(String name) {
		super();
		this.name = name;
	}
	//通过ThreadLocal类的get()方法返回线程局部变量值
	public Double getAmount() {
		return amount.get();
	}
	//通过ThreadLocal类的set()方法设置线程局部变量值
	public void setAmount(Double amount) {
		this.amount.set(amount);;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

Consumidor DailyConsmption

import java.util.Random;

public class DailyConsmption implements Runnable {

	private Account account;
	Random random = new Random();
	
	public DailyConsmption(Account account) {
		this.account = account;
	}
	
	@Override
	public void run() {
		//设置银行卡存款
		account.setAmount((double)random.nextInt((2000)+100));
		System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"银行卡,存款"+account.getAmount()+"元");
		//声明消费金额变量 comsumptionAmount
		double consumptionAmount = 0.0;
		//声明保存余额的变量
		double balance = 0.0;
		//模拟账户消费5次
		for (int i = 0; i < 5; i++) {
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			//随机生成一个消费金额
			consumptionAmount = random.nextInt(((100)+1));
			//消费完成之后的金额
			balance = account.getAmount() - consumptionAmount;
			if (balance >= 0) {
				System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"银行卡消费了"+account.getAmount()+"元,余额"+balance+"元");
				account.setAmount(balance);
			} else {
				System.out.println(account.getName()+"的"+Thread.currentThread().getName()+"银行卡余额只剩"+account.getAmount()+"元,不够支付"+consumptionAmount+"元");
				break;
			}
		}
	}

}

Clase de prueba TestConsmption


public class TestConsmption {
	public static void main(String[] args) {
		//实例化account对象
		Account account = new Account("张三");
		//实例化Runnable对象
		DailyConsmption consmption = new DailyConsmption(account);
		//创建并启动两条线程
		new Thread(consmption,"6222 5555 0022 2200").start();
		new Thread(consmption,"6222 5555 8899 1177").start();
	}

}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44893902/article/details/108815806
Recomendado
Clasificación