synchronized關鍵字
synchronized是進行同步處理而保證線程安全。在一個方法中,如果是方法內(nèi)的私有變量,那個這個變量是線程安全的,但是類中的實例變量是可能會出現(xiàn)線程安全問題的,當多個線程對這個實例變量進行修改,就可能會出現(xiàn)結(jié)果并不是我們期望的結(jié)果。
線程安全問題
下面一段代碼就出現(xiàn)了線程安全問題。
本來當username為a的時候,num應該為100,但是由于設置讓t1休眠了2秒,導致num被刷新成了200,導致最后輸出時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 {