java编程题:100个线程同时向一个银行账户中存入1元钱
2017-03-26 13:37
519 查看
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* java编程题:100个线程同时向一个银行账户中存入1元钱
*/
public class Test {
public static void main(String[] args) {
Account account = new Account();
ExecutorService service = Executors.newFixedThreadPool(100);
for (int i = 1; i <= 100; i++) {
service.execute(new MoneyThread(account, 1));
}
service.shutdown();
while(!service.isTerminated()){}
System.out.println("账户金额:"+account.getBalance());
}
}
/**
* 银行账户类
*/
class Account {
private double balance; //账户余额
private Lock accountLock = new ReentrantLock(); //锁对象
/**
* 存入金额方法
*
* 实现方式1:
* synchronized关键字修饰方法为同步方法
*
public synchronized void deposit(double money) {
double newBalance = balance + money;
try {
Thread.sleep(10); //模拟此业务需要处理时间
} catch (InterruptedException e) {
e.printStackTrace();
}
balance = newBalance;
}
*/
/**
* 存入金额方法
*
* 实现方式2:
* 通过JDK1.5显示式锁机制,为每个银行账户创建一个锁对象,在存款操作时进行加锁和解锁的操作。
*/
public void deposit(double money) {
accountLock.lock(); //加锁
double newBalance = balance + money;
try {
Thread.sleep(10); //模拟此业务需要处理时间
} catch (InterruptedException e) {
e.printStackTrace();
}
balance = newBalance;
accountLock.unlock(); //解锁
}
/**
* 获得账户金额
*/
public double getBalance() {
return balance;
}
}
/**
* 存钱线程类
*/
class MoneyThread implements Runnable {
private Account account; //存入账户
private double money; //存入金额
public MoneyThread(Account account, double money) {
this.account = account;
this.money = money;
}
@Override
public void run() {
account.deposit(money);
}
}
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* java编程题:100个线程同时向一个银行账户中存入1元钱
*/
public class Test {
public static void main(String[] args) {
Account account = new Account();
ExecutorService service = Executors.newFixedThreadPool(100);
for (int i = 1; i <= 100; i++) {
service.execute(new MoneyThread(account, 1));
}
service.shutdown();
while(!service.isTerminated()){}
System.out.println("账户金额:"+account.getBalance());
}
}
/**
* 银行账户类
*/
class Account {
private double balance; //账户余额
private Lock accountLock = new ReentrantLock(); //锁对象
/**
* 存入金额方法
*
* 实现方式1:
* synchronized关键字修饰方法为同步方法
*
public synchronized void deposit(double money) {
double newBalance = balance + money;
try {
Thread.sleep(10); //模拟此业务需要处理时间
} catch (InterruptedException e) {
e.printStackTrace();
}
balance = newBalance;
}
*/
/**
* 存入金额方法
*
* 实现方式2:
* 通过JDK1.5显示式锁机制,为每个银行账户创建一个锁对象,在存款操作时进行加锁和解锁的操作。
*/
public void deposit(double money) {
accountLock.lock(); //加锁
double newBalance = balance + money;
try {
Thread.sleep(10); //模拟此业务需要处理时间
} catch (InterruptedException e) {
e.printStackTrace();
}
balance = newBalance;
accountLock.unlock(); //解锁
}
/**
* 获得账户金额
*/
public double getBalance() {
return balance;
}
}
/**
* 存钱线程类
*/
class MoneyThread implements Runnable {
private Account account; //存入账户
private double money; //存入金额
public MoneyThread(Account account, double money) {
this.account = account;
this.money = money;
}
@Override
public void run() {
account.deposit(money);
}
}
相关文章推荐
- Java实例说明 100个线程同时向一个银行账户中存入1元钱,在没有使用同步机制和使用同步机制情况下的执行情况
- 下面的例子演示了100个线程同时向一个银行账户中存入1元钱,在没有使用同步机制和使用同步机制情况下的执行情况。
- java多线程(100个线程向同一个账户充值1元)
- Java--银行账户存取款线程设计1(交互线程)
- JAVA多线程之两个线程同时写一个文件
- java中,多个线程同时调用同一个静态方法的问题
- java创建一个银行账户,并具有存取款操作(参数传递)
- 一个方法最多2个线程同时使用的JAVA实现
- 一个银行账户5000块,两夫妻一个拿着 存折,一个拿着卡,开始取钱比赛,每次只能取一千块,要求不准出现线程安全问题。
- (Java线程)创建一个售票程序,售卖100张票,三个窗口同时卖,给线程加锁
- JAVA基础学习--一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized
- 银行账户模拟(线程协作) java 实现
- 一个JAVA类有几个线程?
- Java怎样中断一个运行中的线程(2)
- Java怎样中断一个运行中的线程(1)
- Java怎样中断一个运行中的线程(1)
- Java怎样中断一个运行中的线程(3)
- Java怎样中断一个运行中的线程(3)
- 【转载】Java怎样中断一个运行中的线程
- Java怎样中断一个运行中的线程(1)