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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多线程理解及面试

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程理解及面试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、什么是進城和線程?

進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。(進程是資源分配的最小單位)

線程:同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器(PC),線程切換開銷小。(線程是cpu調度的最小單位)

2、為什么用多線程?

隨著計算機的發展,對CPU的要求越來越高,進程之間的切換開銷較大,已經無法滿足越來越復雜的程序的要求了。于是就發明了線程,線程是程序執行中一個單一的順序控制流程,是程序執行流的最小單元,是處理器調度和分派的基本單位。一個進程可以有一個或多個線程,各個線程之間共享程序的內存空間(也就是所在進程的內存空間)。一個標準的線程由線程ID、當前指令指針(PC)、寄存器和堆棧組成。而進程由內存空間(代碼、數據、進程空間、打開的文件)和一個或多個線程組成。而進程的切換相對線程的切換消耗大很多。

3、java怎么使用多線程?

java中要想實現多線程,有三種方法,一是繼承Thread類,二是實現Runable接口,三是實現Callable接口,并與Future、線程池結合使用(該方法使用較少,有興趣看這里Java并發編程與技術內幕:Callable、Future、FutureTask、CompletionService?)

說明: 在啟動的多線程的時候,需要先通過Thread類的構造方法Thread(Runnable target) 構造出對象,然后調用Thread對象的start()方法來運行多線程代碼。 實際上所有的多線程代碼都是通過運行Thread的start()方法來運行的。因此,不管是擴展Thread類還是實現Runnable接口來實現多線程,最終還是通過Thread的對象的API來控制線程的,熟悉Thread類的API是進行多線程編程的基礎。 面試題1:java實現線程的方法有幾種?Thread和Runable的區別?

實現Runnable接口比繼承Thread類所具有的優勢:

1):適合多個相同的程序代碼的線程去處理同一個資源

2):可以避免java中的單繼承的限制

3):增加程序的健壯性,代碼可以被多個線程共享,代碼和數據獨立

//通過Runnable接口實現 class MyThread implements Runnable {private int ticket = 10;@Overridepublic void run() {for(int x = 0; x < 100; x++) {if(this.ticket > 0) {System.out.print("賣票," + this.ticket --);}} } }public class TestDemo{public static void main(String[] args) {MyThread mt = new MyThread();new Thread(mt).start();new Thread(mt).start();new Thread(mt).start();} }
//通過繼承Thread實現多線程,未能實現數據共享 class MyThread extends Thread {private int ticket = 10;@Overridepublic void run() {for(int x = 0; x < 100; x++) {if(this.ticket > 0) {System.out.print("賣票," + this.ticket --);}}} }public class TestDemo{public static void main(String[] args) {MyThread mt1 = new MyThread();MyThread mt2 = new MyThread();MyThread mt3 = new MyThread();mt1.start();mt2.start();mt3.start();} }

?

4):線程池只能放入實現Runable或callable類線程,不能直接放入繼承Thread的類

?

面試題2: 一個JVM進程啟動的時候至少啟動幾個線程?

至少啟動兩個線程,一是,main線程,程序的主要執行,以及啟動子線程; 二是GC線程,用于垃圾收集;

轉載于:https://www.cnblogs.com/zhou2lin/p/8636387.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

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