synchronized關(guān)鍵字

synchronized是進(jìn)行同步處理而保證線程安全。在一個(gè)方法中,如果是方法內(nèi)的私有變量,那個(gè)這個(gè)變量是線程安全的,但是類中的實(shí)例變量是可能會(huì)出現(xiàn)線程安全問題的,當(dāng)多個(gè)線程對這個(gè)實(shí)例變量進(jìn)行修改,就可能會(huì)出現(xiàn)結(jié)果并不是我們期望的結(jié)果。

線程安全問題

下面一段代碼就出現(xiàn)了線程安全問題。
本來當(dāng)username為a的時(shí)候,num應(yīng)該為100,但是由于設(shè)置讓t1休眠了2秒,導(dǎo)致num被刷新成了200,導(dǎo)致最后輸出時(shí)a和b的num都是200。

public class Service {    private int num = 0;    public void add(String username) {        try {            if (username.equals("a")) {
                num = 100;
                Thread.sleep(2000);
            } else {
                num = 200;
            }
            System.out.println(username + " " + num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}public class ThreadA extends Thread {