http://wenku.baidu.com/view/704e1c0879563c1ec5da71fd.html这篇文章非常火  在百度搜一下线程安全   到处都是转载 其中作者举了一个线程不安全的例子 银行账户那段代码  还说 "第一次执行结果为10200,第二次执行结果为1060,每次执行的结果都是不确定的"可我运行了无数次却发现恰恰是线程安全的  结果唯一确定  不知道是作者哪里搞错了  谁能猜出作者的本意 把这段代码变回线程不安全的反面教材 .
还是贴出来吧
public class Account {  
 
    private int balance;  
 
    public Account(int balance) {  
        this.balance = balance;  
    }  
 
    public int getBalance() {  
        return balance;  
    }  
 
    public void add(int num) {  
        balance = balance + num;  
    }  
 
    public void withdraw(int num) {  
        balance = balance - num;  
    }  
 
    public static void main(String[] args) throws InterruptedException {  
        Account account = new Account(1000);  
        Thread a = new Thread(new AddThread(account, 20), "add");  
        Thread b = new Thread(new WithdrawThread(account, 20), "withdraw");  
        a.start();  
        b.start();  
        a.join();  
        b.join();  
        System.out.println(account.getBalance());  
    }  
 
    static class AddThread implements Runnable {  
        Account account;  
        int     amount;  
 
        public AddThread(Account account, int amount) {  
            this.account = account;  
            this.amount = amount;  
        }  
 
        public void run() {  
            for (int i = 0; i < 200000; i++) {  
                account.add(amount);  
            }  
        }  
    }  
 
    static class WithdrawThread implements Runnable {  
        Account account;  
        int     amount;  
 
        public WithdrawThread(Account account, int amount) {  
            this.account = account;  
            this.amount = amount;  
        }  
 
        public void run() {  
            for (int i = 0; i < 100000; i++) {  
                account.withdraw(amount);  
            }  
        }  
    }