Java多線程面試題

1、在Java中什么是進程,什么是線程

  • 進程:進程是程序執(zhí)行的一個實例,進程是線程的容器。程序是指令、數(shù)據(jù)及其組織形式的描述,進程是程序的實體。
  • 線程:有時被稱為輕量級進程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。

在java中,進程大致等于JVM,線程屬于JVM,線程可以被java應用程序在運行時動態(tài)的創(chuàng)建和停止。

2、Java程序中至少有幾個線程?
每個java程序在main線程內(nèi)執(zhí)行,因此每個java程序至少有一個線程

3、每一個Java線程都有哪些屬性

  • 線程的標識符id
  • 線程的名稱
  • 線程優(yōu)先級
  • 線程的狀態(tài)
  • 線程所屬的線程組

4、線程有哪些狀態(tài)

  • NEW:初始狀態(tài),線程被構建,但是還沒有調(diào)用start方法
  • RUNNABLE:運行狀態(tài),Java線程將被操作系統(tǒng)中的就緒和運行兩種狀態(tài)籠統(tǒng)的稱作運行中
  • BLOCKED:阻塞狀態(tài),表示線程阻塞于鎖
  • WAITING:等待狀態(tài),表示線程進入等待狀態(tài),進入該狀態(tài)表示當前線程需要等待其它線程做出一些特定的動作(通知或中斷)
  • TIME_WAITING: 超時等待狀態(tài),該狀態(tài)不同于WAITING,它可以在指定的時間內(nèi)自行返回的
  • TERMINATED:終止狀態(tài),表示當前線程已經(jīng)執(zhí)行完畢

JDK安裝目錄下bin目錄下執(zhí)行命令jstack工具可以查看代碼運行時的線程信息。

5、線程的創(chuàng)建方式

  • 繼承Thread類創(chuàng)建線程類
  • 實現(xiàn)Runnable接口

一般實現(xiàn)Runnable接口的方式更好一些,關于兩者的對比,Thread和Runnable的區(qū)別

6、線程為什么不能通過Stop方法停止
stop方法過于暴力,會直接終止線程,并且立即釋放這個線程所持有的鎖,而這些鎖是用來維持對象一致性的,如果此時,寫線程寫入的數(shù)據(jù)正寫入一半,并強行終止,那么對象就會被寫壞,同時由于鎖已經(jīng)被釋放,另外一個等待該鎖的讀線程就順利成章的讀到了這個不一致的問題。 --- 《Java高并發(fā)程序設計》. 并行程序基礎

7、下面的程序會輸出什么

public class MultiThreading {
    private static class MyThread extends Thread {
        public MyThread(String name) {
            super(name);
        }
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
        public static void main(String[] args) {
            MyThread myThread = new MyThread("myThread");
            myThread.run();
            myThread.start();
        }
    }
}

調(diào)用run方法時,是在main線程內(nèi)部執(zhí)行的。

main
myThread

8、什么是Daemon線程
守護線程是一種特殊的線程,在后臺默默的完成一些系統(tǒng)性的服務,比如垃圾回收,JIT線程就可以理解為守護線程。與之對應的是用戶線程,用戶線程可以理解為系統(tǒng)的工作線程,它會完成程序應該要完成的業(yè)務操作,如果用戶線程全部結束,就意味著這個程序無事可做了,當一個Java應用內(nèi),只有守護線程時,Java虛擬機就會自然退出。

守護線程必須在線程start之前設置,否則會拋出IllegalThreadStateException

9、在Java中,那些操作是原子性的?

  • 讀和寫的操作變量是 主類型的(primitive variables)除了long 和 double
  • 讀和寫的變量聲明了volatile
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一 用Runnable還是Thread? Java中實現(xiàn)多線程有兩種方法:繼承Thread類、實現(xiàn)Runnable...
    Q南南南Q閱讀 3,817評論 0 4
  • 下面是我自己收集整理的Java線程相關的面試題,可以用它來好好準備面試。 參考文檔:-《Java核心技術 卷一》-...
    阿呆變Geek閱讀 15,158評論 14 507
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,853評論 18 399
  • Java 線程面試問題 在任何Java面試當中多線程和并發(fā)方面的問題都是必不可少的一部分。如果你想獲得任何股票投資...
    堯淳閱讀 1,180評論 0 13
  • http://m.itdecent.cn/p/db785c3f1603 拿到app id
    aaa000閱讀 944評論 0 0

友情鏈接更多精彩內(nèi)容