Java非線程安全問題的解決方法
發布于:2019-06-12   作者:admin   瀏覽:14次

  非線程安全主要是指多個線程對同一個對象中的同一個實例變量進行操作時會出現值被更改、值不同步的情況,進而影響程序的執行流程。下面java培訓用一個示例來學習一下如何解決非線程安全問題。

Java非線程安全問題的解決方法

  本案例模擬了多線程下的用戶登錄驗證功能。首先編寫一個類實現驗證功能,LoginCheck類的代碼如下:

  packagech14;

  publicclassLoginCheck

  {

  privatestaticStringusername;

  privatestaticStringpassword;

  publicstaticvoiddoPost(String_username,String_password)

  {

  try

  {

  username=_username;

  if(username.equals("admin"))

  {

  Thread.sleep(5000);

  }

  password=_password;

  System.out.println("username="+username+"password="+password);

  }

  catch(InterruptedExceptione)

  {

  //TODOAuto-generatedcatchblock

  e.printStackTrace();

  }

  }

  }

  接下來創建線程類LoginThreadA和LoginThreadB,這兩個線程都調用LoginCheck類進行登錄信息。其中LoginThreadA類的代碼如下:

  packagech14;

  publicclassLoginThreadAextendsThread

  {

  publicvoidrun()

  {

  LoginCheck.doPost("admin","admin");

  }

  }

  LoginThreadB類的代碼如下:

  packagech14;

  publicclassLoginThreadBextendsThread

  {

  publicvoidrun()

  {

  LoginCheck.doPost("root","root");

  }

  }

  現在編寫主線程程序,分別創建LoginThreadA線程實例和LoginThreadB線程實現,然后啟動這兩個線程。主線程的代碼如下:

  純文本復制

  packagech14;

  publicclassTest07

  {

  publicstaticvoidmain(String[]args)

  {

  LoginThreadAa=newLoginThreadA();

  a.run();//啟動線程LoginThreadA

  LoginThreadBb=newLoginThreadB();

  b.run();//啟動線程LoginThreadB

  }

  }

快3彩票