创建并启动100个线程,往balance中添加1个硬币,最后balance会为多少呢?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class AccountWithoutSync {
private static Account account = new Account();
public static void main(String[] args){
ExecutorService executor = Executors.newCachedThreadPool();//线程池
for(int i=0;i<100;i++){//执行100个线程
executor.execute(new AddPennyTask());
}
executor.shutdown();
while(!executor.isTerminated()){//确认100个线程关闭
}
System.out.println("what is the balance?"+account.getBalance());
}
public static class AddPennyTask implements Runnable{//內部類
public void run(){
account.deposit(1);
}
}
public static class Account{//內部類
private int balance = 0;
public int getBalance() {
return balance;
}
public void deposit(int amount){
int newBalance = balance + amount;
try{
Thread.sleep(1);//1ms
}catch(InterruptedException ex){
}
balance = newBalance;
}
}
}
因为多个线程访问的是同一个balance,所以balance结果不确定。
what is the balance?7
what is the balance?8
共享资源被多个线程同时访问,数据可能遭到破坏。
lock与synchronize