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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小猫的java基础知识点汇总(下)

發布時間:2023/12/13 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小猫的java基础知识点汇总(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、線程和進程有什么區別?

進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位

線程是進程的子集,一個進程可以有很多線程,每條線程并行執行不同的任務。

不同的進程使用不同的內存空間,而所有的線程共享一片相同的內存空間。

2、如何在Java中實現線程?

繼承Thread類 class Handler extends Thread{public void run(){//方法重寫}public static void main(String[] args){Thread thread = new Handler();//創建線程對象thread.start();//啟動線程} } 實現Runnable接口 class Handler implements Runnable{public void run(){//方法實現}public static void main(String[] args){Handler handler = new Handler();Thread thread = new Thread(handler);//創建線程對象thread.start();//啟動線程} }

3、Java 關鍵字volatile 與 synchronized 作用與區別?

????1,volatile
? ??它所修飾的變量不保留拷貝,直接訪問主內存中的。
在Java內存模型中,有main memory,每個線程也有自己的memory (例如寄存器)。

為了性能,一個線程會在自己的memory中保持要訪問的變量的副本。這樣就會出現同一個變 量在某個瞬間,在一個線程的memory中的值可能與另外一個線程memory中的值,或者main memory中的值不一致的情況。?

一個變量聲明為volatile,就意味著這個變量是隨時會被其他線程修改的,因此不能將它cache在線程memory中。
????2,synchronized

當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執行該段代碼。

一、當兩個并發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。

二、當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有synchronized(this)同步代碼塊的訪問將被阻塞。

4、線程生命周期?

新建一個線程時,它的狀態是New。當我們調用線程的start()方法時,狀態被改變為Runnable。線程調度器會為Runnable線程池中的線程分配CPU時間并且將它們的狀態改變為Running。其他的線程狀態還有Waiting,Blocked?和Dead。

5、死鎖?

指多個進程在運行過程中因爭奪資源而造成的一種僵局,當處于這種狀態時,若無外力作用,它們都將無法再向前推進。

原因可歸結為兩點:競爭資源、?進程間推進順序非法
產生死鎖的必要條件:

互斥條件:在一段時間內某資源僅為一進程所占用。
請求和保持條件:對已獲得的資源保持不放。
不剝奪條件:已獲得的資源只能由自己釋放。
環路等待條件:存在一個進程--資源的環形鏈。

6、什么是線程池? 為什么要使用它?

創建線程要花費昂貴的資源和時間,如果任務來了才創建線程那么響應時間會變長,而且一個進程能創建的線程數有限。

線程池實現了線程重復利用,節約了時間和資源。

// Java線程池的完整構造函數 public ThreadPoolExecutor(int corePoolSize, // 線程池長期維持的線程數,即使線程處于Idle狀態,也不會回收。int maximumPoolSize, // 線程數的上限long keepAliveTime, TimeUnit unit, // 超過corePoolSize的線程的idle時長,// 超過這個時間,多余的線程會被回收。BlockingQueue<Runnable> workQueue, // 任務的排隊隊列ThreadFactory threadFactory, // 新線程的產生方式RejectedExecutionHandler handler) // 拒絕策略

7、反射?

JAVA反射機制是在運行狀態中,對于任意一個實體類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

8、JDK 、 JRE 、JVM有什么區別和聯系?

JVM : Java 虛擬機。能夠將 class 文件中的字節碼指令進行識別并調用操作系統向上的 API 完成動作。所以說,jvm 是 Java 能夠跨平臺的核心。

JRE :Java 運行時環境。包含兩個部分,jvm和 Java 的一些基本類庫。

JDK :Java 開發工具包。jdk 是整個 Java 開發的核心,它集成了 jre 和一些好用的小工具。

這三者的關系是:一層層的嵌套關系。JDK>JRE>JVM。

9、深拷貝淺拷貝

? ? ? 數據類型分為兩種基礎類型和引用類型:

基礎類型:像Number、String、Boolean等這種為基本類型
引用類型:Object和Array

淺拷貝只是復制了對象的引用地址,兩個對象指向同一個內存地址,修改其中任意的值,另一個值會隨之變化

深拷貝是將對象及值復制過來,兩個對象修改其中任意的值另一個值不會改變。

10、JVM內存分為哪幾部分?各個部分的作用是什么?

JVM內存區域分為五個部分,分別是堆,方法區,虛擬機棧,本地方法棧,程序計數器。


1)堆。

堆是Java對象的存儲區域,任何用new字段分配的Java對象實例和數組。
2)方法區。

它用于存儲已被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯后的代碼等數據,方法區,從JDK1.8永久代被移除。
3)虛擬機棧。

虛擬機棧中執行每個方法的時候,都會創建一個棧幀用于存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
4)本地方法棧。

與虛擬機棧發揮的作用相似,相比于虛擬機棧為Java方法服務,本地方法棧為虛擬機使用的Native方法服務,執行每個本地方法的時候,都會創建一個棧幀用于存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
5)程序計數器。

指示Java虛擬機下一條需要執行的字節碼指令。

總:其中方法區和堆被JVM中多個線程共享,比如類的靜態常量就被存放在方法區,供類對象之間共享,虛擬機棧,本地方法棧,pc寄存器是每個線程獨立擁有的,不會與其他線程共享。

11、為什么會出現4.0-3.6=0.40000001這種現象?

2進制的小數無法精確的表達10進制小數,在計算10進制小數的過程中要先轉換為2進制進行計算,這個過程中出現誤差。

12、“==”比較的是什么?

“==”兩邊是對象,比較地址。

“==”兩邊是基本類型,比較數值。

?

總結

以上是生活随笔為你收集整理的小猫的java基础知识点汇总(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

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