非線性安全

線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。

線程不安全就是不提供數據訪問保護,有可能出現多個線程先后更改數據造成所得到的數據是臟數據

這里舉個非線性安全的例子:


public static void main(String[] args) throws InterruptedException {

Mythread thMythread=new Mythread();

final Thread thread1=new Thread(thMythread);

Thread thread2=new Thread(thMythread);

Thread thread3=new Thread(thMythread);

Thread thread4=new Thread(thMythread);

Thread thread5=new Thread(thMythread);

thread1.start();

thread2.start();

thread3.start();

thread4.start();

thread5.start();

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

try {

Thread.sleep(100);

System.out.println(thread1.isAlive());

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}).start();

}

class Mythread extends Thread{

private int sharedate=10;

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println(--sharedate);

}

}

運行結果是:

如果你學過操作系統,你就會發現Mythread的sharedata是個共享區呀,怎么能不加鎖呢,而在java中有個synchronized的東西,我只需要在run方法加synchronized,就可以實現線程安全了,而添加了這個synchronized 就相當于為這個方法加鎖,當有一個線程運行這個方法的時候,其他線程必須要等待這個線程執行完才能執行這個方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,136評論 0 62
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,739評論 18 399
  • 本文主要講了java中多線程的使用方法、線程同步、線程數據傳遞、線程狀態及相應的一些線程函數用法、概述等。 首先講...
    李欣陽閱讀 2,482評論 1 15
  • Java多線程學習 [-] 一擴展javalangThread類 二實現javalangRunnable接口 三T...
    影馳閱讀 2,981評論 1 18
  • 摘要: 我們已經知道,synchronized 是Java的關鍵字,是Java的內置特性,在JVM層面實現了對臨界...
    kingZXY2009閱讀 1,841評論 0 20