一、synchronized有鎖重入的特點,某個執行緒得到物件的鎖後,再次請求此物件可以再次得到改物件的鎖。如下示例,在method1中呼叫method2,在method2中呼叫method3,而method1、method2和method3都是加了synchronized關鍵字的。
public class syncdubbo1
public synchronized void method2()
public synchronized void method3()
public static void main(string args)
});t1.start();
}}
二、父類和子類的方法都是synchronized的,在子類的方法中呼叫父類的方法,也是執行緒安全的。
public class syncdubbo2 catch (interruptedexception e)
} }static class sub extends main
} catch (interruptedexception e)
} }public static void main(string args)
});t1.start(); }
}
執行結果:
三、synchronized方法內拋異常怎麼處理
鎖會自動釋放
throw runtimeexception打斷此執行緒或者記錄日誌然後continue,選擇哪種方案取決於具體業務要求。
public class syncexception
} catch (interruptedexception e)
} }public static void main(string args)
},"t1");
t1.start(); }
}
四、synchronized**塊鎖,實用起來也會比較靈活
this、class、object都可以用來作為**塊鎖
public class objectlock catch (interruptedexception e)
} }public void method2() catch (interruptedexception e)
} }private object lock = new object();
public void method3() catch (interruptedexception e)
} }
public static void main(string args)
});thread t2 = new thread(new runnable()
});thread t3 = new thread(new runnable()
});t1.start();
t2.start();
t3.start();} }
五、盡量不要用string常量作為鎖
如下**只會有t1執行緒執行,但可以new乙個string物件。
public class stringlock
} catch (interruptedexception e)
} }public static void main(string args)
},"t1");
thread t2 = new thread(new runnable()
},"t2");
t1.start();
t2.start();
}}
六、乙個物件被用作鎖時,這個物件內的屬性發生變化不會影響鎖的使用。
public class modifylock
public void setname(string name)
public int getage()
public void setage(int age)
public synchronized void changeattributte(string name, int age) catch (interruptedexception e) }
public static void main(string args)
},"t1");
thread t2 = new thread(new runnable()
},"t2");
t1.start();
try catch (interruptedexception e)
t2.start(); }
}
synchronized細節問題
一 synchronized有鎖重入的特點,某個執行緒得到物件的鎖後,再次請求此物件可以再次得到改物件的鎖。如下示例,在method1中呼叫method2,在method2中呼叫method3,而method1 method2和method3都是加了synchronized關鍵字的。public c...
powerdesigner匯出指令碼細節問題
love聊網路那點事 步驟 database generatedatabase 匯出的指令碼需要調整的地方有 mysql5.5測試結果 1 帶有autocreament的字段,主鍵約束要放在建表語句中,不能在外面通過alter加入。因為該欄位必須是主鍵。例如 create table t sys g...
執行緒synchronized 例子
public class foo public int fix int y return x public class myrunnable implements runnable catch interruptedexception e system.out.println thread.curr...