歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 中多線程下的單例模式

Java 中多線程下的單例模式

日期:2017/3/1 11:09:35   编辑:Linux編程

Java 中多線程下的單例模式

  1. package namespace;
  2. //單例模式--- 餓漢式
  3. /*
  4. class Person
  5. {
  6. private Person p=new Person ();
  7. private Person () {}
  8. public Person GetInstance()
  9. {
  10. return p;
  11. }
  12. }
  13. */
  14. /*
  15. * 下面是懶漢式,只在在單線種的情況下,而這種情況在多線程的情況下會多現在不安全現在,因為如果有兩個線程同時訪問到new Person ,那麼我就生成兩個對象,這樣就違反了
  16. * 單例模式下面一個是在多線
  17. * */
  18. /*
  19. class Person
  20. {
  21. private Person person=null;
  22. private Person () {}
  23. public Person getInstance()
  24. {
  25. if(person==null)
  26. {
  27. person =new Person();
  28. }
  29. return person;
  30. }
  31. }*/
  32. class Person
  33. {
  34. private Person person=null;
  35. private Person () {}
  36. public Person getInstance()
  37. {
  38. if(person==null)
  39. {
  40. synchronized(this)
  41. {
  42. if(person==null)
  43. person =new Person();
  44. }
  45. }
  46. return person ;
  47. }
  48. }
  49. /*
  50. *
  51. * 這樣在synchronized 線程控制塊裡面進行多線程的控制,就不會再出現多個線程訪問時出現多個對象的情況了.
  52. * 還有一點就是外面的person ==null 判斷是用來提高效率的,不然第一次都要對鎖進行判斷,消耗濃資源
  53. * 這樣可以有次的提高效率
  54. * */
  55. public class Single {
  56. public static void main(String args[])
  57. {
  58. System.out.println("this is java");
  59. }
  60. }
  61. /*
  62. * 單例模式就是在內存中想只能存在一個對象,而不允許再實例化其他的對象
  63. *
  64. * */
Copyright © Linux教程網 All Rights Reserved