java线程同步问题
java线程同步问题
为什么去了while(!excutor.isTerminated()){}不行?纳闷?
线程同步问题:要求建立100个线程,每个线程往账户添加一元钱,最后得个100元,去了那一句,就TM成1了。。
源码:这是得出100的源码
import java.util.concurrent.*;
import java.util.concurrent.locks.*;
public class xianChengTongBu {
private static Account account=new Account();
public static void main(String[] args) {
ExecutorService excutor=Executors.newCachedThreadPool();
for(int i=0;i<100;i++){
excutor.execute(new AddTask());
}
excutor.shutdown();
while(!excutor.isTerminated()){}
System.out.print(" "+account.getBalance());
}
private static class Account{
// private static Lock lock=new ReentrantLock();
private int balance=0;
public int getBalance(){
return balance;
}
public synchronized void desposit(int amount){
// lock.lock();
try{
int newBalance=balance+amount;
Thread.sleep(5);
balance=newBalance;
}
catch (InterruptedException e){
}
/* finally{
lock.unlock();
}*/
}
}
private static class AddTask implements Runnable{
public void run(){
account.desposit(1);
}
}
}
为什么去了while(!excutor.isTerminated()){}不行?纳闷?
线程同步问题:要求建立100个线程,每个线程往账户添加一元钱,最后得个100元,去了那一句,就TM成1了。。
源码:这是得出100的源码
import java.util.concurrent.*;
import java.util.concurrent.locks.*;
public class xianChengTongBu {
private static Account account=new Account();
public static void main(String[] args) {
ExecutorService excutor=Executors.newCachedThreadPool();
for(int i=0;i<100;i++){
excutor.execute(new AddTask());
}
excutor.shutdown();
while(!excutor.isTerminated()){}
System.out.print(" "+account.getBalance());
}
private static class Account{
// private static Lock lock=new ReentrantLock();
private int balance=0;
public int getBalance(){
return balance;
}
public synchronized void desposit(int amount){
// lock.lock();
try{
int newBalance=balance+amount;
Thread.sleep(5);
balance=newBalance;
}
catch (InterruptedException e){
}
/* finally{
lock.unlock();
}*/
}
}
private static class AddTask implements Runnable{
public void run(){
account.desposit(1);
}
}
}
...全文
相关推荐
以银行取钱为例模拟Java多线程同步问题完整代码
主要介绍了以银行取钱为例模拟Java多线程同步问题完整代码,具有一定借鉴价值,需要的朋友可以参考下。
java多线程——线程同步问题
试想一个场景:同一个银行账户有1000RMB,两个对象同时对该账户取钱,两人各取800,流程如下: 输入帐号、密码,验证成功 输入取钱金额,系统比较账户余额和取钱金额 验证成功,允许取钱操作,然后,两个人一起开开心心的拿着1.6k回家了。剩下一个余额为-600的账户默默哭泣。 这就是我们常说的:多线程并发操作线程安全问题。 就取钱例子模拟代码实现: 1、定义一个账户
Java线程间通信不同步问题原理与模拟实例
主要介绍了Java线程间通信不同步问题,结合实例形式分析了java线程间通信不同步问题的原理并模拟实现了线程间通信不同步情况下的异常输出,需要的朋友可以参考下
Java多线程-线程的同步与锁的问题
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。本篇文章主要介绍了Java多线程-线程的同步与锁的问题,有兴趣的可以了解一下。
JAVA实现线程间同步与互斥生产者消费者问题
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能


Java SE
