日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

线程安全面试题 java_Java面试题-线程安全

發布時間:2024/10/12 java 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程安全面试题 java_Java面试题-线程安全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 什么叫線程安全?servlet是線程安全嗎?

答:如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。?或者說:一個類或者程序所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導致該接口的執行結果存在二義性,也就是說我們不用考慮同步的問題。

servlet不是線程安全的,每個servlet都只被實例化一次,每個調用都是servlet的同一個實例,并且對類變量沒有線程安全,數據量大的時候容易照成異常。

2. 同步有幾種實現方法?

答:同步的實現方面有兩種,分別是synchronized,wait與notify

3. volatile有什么用?能否用一句話說明下volatile的應用場景?

答:Volatile 變量具有 synchronized 的可見性特性,但是不具備原子特性。可以被看作是一種 “程度較輕的 synchronized”;與 synchronized 塊相比,volatile 變量所需的編碼較少,并且運行時開銷也較少,但是它所能實現的功能也僅是 synchronized 的一部分。

您只能在有限的一些情形下使用 volatile 變量替代鎖。要使 volatile 變量提供理想的線程安全,必須同時滿足下面兩個條件:

A. 對變量的寫操作不依賴于當前值。

B. 該變量沒有包含在具有其他變量的不變式中。

4. 請說明下java的內存模型及其工作流程。

答:Java把內存劃分成兩種:一種是棧內存,一種是堆內存。

棧內存:存放對象:函數中基本類型的變量和對象的引用變量、靜態類方法 ;特點:棧有一個很重要的特殊性,就是存在棧中的數據可以共享。

堆內存:存放對象:用來存放由new創建的對象和數組;特點:在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。

java 內存模型 ( java memory model ):根據Java Language Specification中的說明, jvm系統中存在一個主內存(Main Memory或Java Heap Memory),Java中所有對象成員變量都儲存在主存中,對于所有線程都是共享的。每條線程都有自己的工作內存(Working Memory),工作內存中保存的是主存中某些對象成員變量的拷貝,線程對所有對象成員變量的操作都是在工作內存中進行,線程之間無法相互直接訪問,變量傳遞均需要通過主存完成。

(1) 獲取對象監視器的鎖(lock)

(2) 清空工作內存數據, 從主存復制對象成員變量到當前工作內存, 即同步數據 (read and load)

(3) 執行代碼,改變共享變量值 (use and assign)

(4) 將工作內存數據刷回主存 (store and write)

(5) 釋放對象監視器的鎖 (unlock)

5. 為什么代碼會重排序?

總結

以上是生活随笔為你收集整理的线程安全面试题 java_Java面试题-线程安全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。