Java 試題八

Java 試題八

1、java中有幾種方法可以實現一個線程?用什么關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?
答:有兩種實現方法,分別是繼承Thread類與實現Runnable接口;用synchronized關鍵字修飾同步方法,反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態,那么其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被”掛起”的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標志,指出線程應該活動還是掛起。若標志指出線程應該掛起,便用wait()命其進入等待狀態。若標志指出線程應當恢復,則用一個notify()重新啟動線程。


2、sleep() 和 wait() 有什么區別?
答:sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用sleep不會釋放對象鎖。wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。


3、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
答:如果數據將在線程間共享。例如正在寫的數據以后可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那么這些數據就是共享數據,必須進行同步存取。當應用程序在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。


4、啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處于可運行狀態,這意味著它可以由JVM調度并執行。這并不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。


5、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?

答:不能,一個對象的一個synchronized方法只能由一個線程訪問。


6、請說出你所知道的線程同步的方法。
答:wait():使一個線程處于等待狀態,并且釋放所持有的對象的lock。
? sleep():使一個正在運行的線程處于睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
? notify():喚醒一個處于等待狀態的線程,注意的是在調用此方法的時候,并不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。

? Allnotity():喚醒所有處入等待狀態的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。


7、多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口;同步的實現方面有兩種,分別是synchronized,wait與notify;


8、線程的基本概念、線程的基本狀態以及狀態之間的關系

答:線程指在程序執行過程中,能夠執行程序代碼的一個執行單位,每個程序至少都有一個線程,也就是程序本身。Java中的線程有四種狀態分別是:運行、就緒、掛起、結束

9、簡述synchronized和java.util.concurrent.locks.Lock的異同 ?
答:主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。


10、Java為什么要引入線程機制,線程、程序、進程之間的關系是怎樣的。

答:線程可以彼此獨立的執行,它是一種實現并發機制的有效手段,可以同時使用多個線程來完成不同的任務,并且一般用戶在使用多線程時并不考慮底層處理的細節。程序是一段靜態的代碼,是軟件執行的藍本。進程是程序的一次動態執行過程,即是處于運行過程中的程序。線程是比進程更小的程序執行單位,一個進程可以啟動多個線程同時運行,不同線程之間可以共享相同的內存區域和數據。多線程程序是運行時間后嗣可能出現在一個進程之內的、有一個以上線程同時運行的情況的程序。


11、Runnable接口包括哪些抽象方法?Thread類有哪些主要域和方法?

答:Runnable接口中僅有run()抽象方法。
Thread類主要域有:MAX_PRIORITY,MIN_PRIORITY,NORM_PRIORITY。
主要方法有start(),run(),sleep(),currentThread(),setPriority(),getPriority(),join()等。


12、創建線程有哪兩種方式?試寫出每種的具體的流程。比較兩種創建方式的不同,哪個更優。

1—繼承Thread類
1) 定義類繼承Thread類。
2) 覆蓋Thread類中的run方法。
3) 創建Thread子類對象,即創建了線程對象。
4) 調用線程對象start方法:啟動線程,調用run方法。
2—實現Runnable接口
1)定義類,實現Runnable接口。
2)覆蓋Runnable接口中的run方法。
3)通過Thread類建立線程對象。
4)將Runnable接口的子類對象作為實際參數傳遞給Thread類的構造方法中。
5)調用Thread類的start方法:開啟線程,調用Runnable子類接口的run方法。
【區別】
繼承Thread: 線程代碼存放Thread子類run方法中。
實現Runnable:線程代碼存在接口的子類的run方法。
【實現方法的好處】
1)避免了單繼承的局限性
2)多個線程可以共享同一個接口子類的對象,非常適合多個相同線程來處理同一份資源。


一、判斷題
1.C 和 Java 都是多線程語言。( )
2.如果線程死亡,它便不能運行。( )
3.在 Java 中,高優先級的可運行線程會搶占低優先級線程。( )
4.程序開發者必須創建一個線程去管理內存的分配。( )
5.一個線程在調用它的 start 方法,之前,該線程將一直處于出生期。( )
6.當調用一個正在進行線程的 stop()方法時,該線程便會進入休眠狀態。( )
7.如果線程的 run 方法執行結束或拋出一個不能捕獲的例外,線程便進入等待狀態。( )
8.一個線程可以調用 yield 方法使其他線程有機會運行。( )

【答案】
1.難度:容易
答案:錯誤
知識點:C 是單線程語言。
2.難度:容易
答案:正確
知識點:線程死亡就意味著它不能運行。
3.難度:適中
答案:正確
知識點:線程優先級的使用。
4.難度:適中
答案:錯誤
知識點:Java 提供了一個系統線程來管理內存的分配。
5.難度:容易
答案:正確
知識點:出生期的概念。
6.難度:適中
答案:錯誤
知識點:應該是 sleep 方法。
7.難度:適中
答案:錯誤
知識點:如果線程的 run 方法執行結束或拋出一個不能捕獲的例外,線程便進入死亡狀態。
8.難度:適中
答案:正確
知識點:yield 方法總是讓高優先級的就緒線程先運行。


二、選擇題
1.Java 語言中提供了一個▁▁線程,自動回收動態分配的內存。
A 異步
B 消費者
C 守護
D 垃圾收集
2.當▁▁方法終止時,能使線程進入死亡狀態。
A run
B setPrority
C yield
D sleep
3.用▁▁方法可以改變線程的優先級。
A run
B setPrority
C yield
D sleep
4.線程通過▁▁方法可以使具有相同優先級線程獲得處理器。
A run
B setPrority
C yield
D sleep
5.線程通過▁▁方法可以休眠一段時間,然后恢復運行。
A run
B setPrority
C yield
D sleep
6.▁▁方法使對象等待隊列的第一個線程進入就緒狀態。
A run
B notify
C yield
D sleep
7.方法 resume( )負責重新開始▁▁線程的執行。
A 被 stop( )方法停止
B 被 sleep( )方法停止
C 被 wait( )方法停止
D 被 suspend( )方法停止
8.▁▁方法可以用來暫時停止當前線程的運行。
A stop( )
B sleep( )
C wait( )
D suspend()

【答案】
1.難度:容易
答案:D
知識點:垃圾線程的使用。
2.難度:容易
答案:A
知識點:run 方法的使用。
3.難度:容易
答案:B
知識點:setPrority 方法的使用。
4.難度:容易
答案:C
知識點:yield 方法的使用。
5.難度:容易
答案:D
知識點:sleep 方法的使用。
6.難度:容易
答案:B
知識點:notify 方法的使用。
7.難度:適中
答案:D
知識點:一個線程被用 suspend( )方法,將該線程掛起。并通過調用 resume( )方法來重新開始線程的執行。
但是該方法容易導致死鎖,應盡量避免使用。
8.難度:適中
答案:BCD
知識點:當調用 stop( )方法后,當前的線程不能重新開始運行。


1、編寫一個繼承Thread類的方式實現多線程的程序。該類MyThread有兩個屬性,一個字符串WhoAmI代表線程名,
一個整數delay代表該線程隨機要休眠的時間。構造有參的構造器,線程執行時,顯示線程名和要休眠時間。
另外,定義一個測試類TestThread,創建三個線程對象以展示執行情況。

class MyThread extends Thread{private String whoAmI;private int delay;public MyThread(String s,int d){whoAmI = s;delay = d;}public void run(){try{sleep(delay);}catch(InterruptedException ie){}System.out.println("Hello!I am"+whoAmI+",I slept"+delay+"milliseconds");}
}
public class TestThread{public static void main(String[] args){MyThread t1 = new MyThread("Thread-1",(int)(Math.random()*100));MyThread t2 = new MyThread("Thread-2",(int)(Math.random()*100));MyThread t3 = new MyThread("Thread-3",(int)(Math.random()*100));t1.start();t2.start();t3.start();}
}

2、利用多線程設計一個程序,同時輸出 50 以內的奇數和偶數,以及當前運行的線程名。

public class Threadprint extends Thread {int k = 1; public void run() { int i=k; while(i<50) { System.out.println(Thread.currentThread().getName()+"-----"+i); i+=2; } System.out.println(Thread.currentThread().getName()+" end!"); } public static void main (String[] args) { Threadprint t1=new Threadprint();Threadprint t2=new Threadprint(); t1.k = 1;t2.k = 2;t1.start(); t2.start(); } 
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250508.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bzoj2957 奧妙重重的線段樹

https://www.lydsy.com/JudgeOnline/problem.php?id2957 線段樹的query和update竟然還可以結合起來用&#xff01; 題意&#xff1a;小A的樓房外有一大片施工工地&#xff0c;工地上有N棟待建的樓房。每天&#xff0c;這片工地上的房子拆了又建、建了又拆。他經常無聊地看著窗…

koa --- 使用Github OAuth登錄

準備 登錄github選擇右上角的setting Developer settings -> OAuth Apps -> Register a new application 填入基本信息 點擊綠色的按鈕,可以看見 client_id 和 client secret 理清思路: 開始時,一個登錄的連接,點擊連接.后臺監聽登錄(/login)路由,然后重定向到github…

[數據結構] - ArrayList探究

一 概述 ArrayList可以理解為動態數組&#xff0c;與java的數組相比&#xff0c;它的容量能動態曾長&#xff0c;ArrayList是List接口的可變數組的實現&#xff0c;允許包括null值在內的所有元素。除了實現List接口外&#xff0c;此類還提供一些方法來操作內部用來存儲列表的數…

10.10考試題

voteplus 【問題描述】 R 君博客上有?個投票板塊&#xff0c;?家可以使?投票的?式來表達??對某些問題的贊成或反對的意見。 投票結果是公開的&#xff0c;但是 R 君會把這個結果化成?個最簡分數&#xff0c;如 1:2,4:3。 注意到同?個最簡分數可能代表了不同的總?數&am…

koa --- 跨域,解析POST參數、路由配置

目標 將開發中經常遇見的問題寫在這里方便查詢. 使用Koa創建一個簡單的服務器 const Koa require("koa"); const app new Koa(); app.listen(3000, () >{console.log("[server] Server is running at http://localhost:3000") })使用koa2-cors解決…

mysql數據庫常用操作

目前最流行的數據庫&#xff1a; oracle、mysql、sqlserver、db2、sqline --&#xff1a;單行注釋 #&#xff1a;也是單行注釋 /* 注釋內容*/&#xff1a;多行注釋 mysql -uroot -p密碼&#xff1a;登錄mysql service mysqld restart重啟mysql /etc/my.cnfmysql的配置文件 /var…

數碼相機控制點的自動定位檢校

為簡化控制場相機檢校中的人工量測控制點的繁瑣工作,提高相機檢校精度,本文提出一種方法:只需均勻量測少量控制點的像方坐標獲取相機檢校初始參數,便可通過動態模板匹配實現單影像相機檢校的控制點高精度自動定位檢校。實驗證明此方法檢校精度與人工量測檢校精度相近。 https:/…

Java 常用類

Java 常用類 字符串相關類 String類&#xff1a;構造字符串對象 常量對象&#xff1a;字符串常量對象是用雙引號括起的字符序列。 例如&#xff1a;”你好”、”12.97”、”boy”等。 字符串的字符使用Unicode字符編碼&#xff0c;一個字符占兩個字節 String類較常用構…

koa --- restful規范及其栗子

遵循Restful規范的簡單的栗子 前端代碼: <html><head><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src"https://unpkg.com/element-ui/lib/index.js"></script><script src&qu…

軟工五:四則運算

題目要求 本次作業要求兩個人合作完成&#xff0c;駕駛員和導航員角色自定&#xff0c;鼓勵大家在工作期間角色隨時互換&#xff0c;這里會布置兩個題目&#xff0c;請各組成員根據自己的愛好任選一題。 題目一&#xff1a; 我們在剛開始上課的時候介紹過一個小學四則運算自動生…

Tomcat 配置Https

https://www.cnblogs.com/wanghaoyuhappy/p/5267702.html JDK1.8 keytool 生存證書 C:\keys\tomcat.keystore 1:證書生成 命令如下: keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -keystore C:/keys/tomcat.keytore -storepass 123456 keytool 使…

koa --- 使用koa-multer和element-ui組件上傳頭像

文件上傳 前端代碼 <script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src"https://unpkg.com/element-ui/lib/index.js"></script> <linkrel"stylesheet"href"https://unpkg.co…

PKUSC2018訓練日程(4.18~5.30)

(總計:共66題) 4.18~4.25&#xff1a;19題 4.26~5.2&#xff1a;17題 5.3~5.9: 6題 5.10~5.16: 6題 5.17~5.23: 9題 5.24~5.30: 9題 4.18 [BZOJ3786]星系探索(偽ETT) [BZOJ4337][BJOI2015]樹的同構(樹的最小表示法) [BZOJ3551][ONTAK2010]Peaks(加強版)(Kruskal重構樹,主席樹) …

筆記:less的三種使用方法

直接在瀏覽器端使用 第一步&#xff0c;引入 .less 文件&#xff08;注意要將 rel 屬性設置為“stylesheet/less”&#xff09; <link rel"stylesheet/less" type"text/css" href"styles.less" /> 第二步&#xff0c;引入Less.js文件 <…

koa --- nunjucks在Koa中的使用、中間件的配置

Nunjucks在Koa中的應用 app.js const koa require(koa); const app new koa(); const router require(./router) const nunjucks require(koa-nunjuncks-2); app.use(nunjucks({ext: html, // 指定視圖文件默認后綴path: path.join(__dirname, views), // 指定視圖目錄…

2018福大軟工實踐第六次作業

目錄 NABCD分析引用N(Need&#xff0c;需求)&#xff1a;A(Approach&#xff0c;做法)&#xff1a;B(Benefit&#xff0c;好處)&#xff1a;C(Competitors&#xff0c;競爭)&#xff1a;D(Delivery&#xff0c;交付)&#xff1a;初期中期個人貢獻分評定原則評定細則本組現場答辯…

day32—CSS多列布局學習

轉行學開發&#xff0c;代碼100天——2018-04-17 關于多列布局&#xff0c;前期已經梳理過&#xff0c;今天的培訓課程學習中再次提及&#xff0c;趁此也做個總結和檢驗。 多列布局的介紹參考&#xff1a; day08—css布局解決方案之多列布局關于多列布局的類型和方法&#xff1…

JDBC 事物處理

JDBC 事物處理 ?事務&#xff1a;指構成單個邏輯工作單元的操作集合 ?事務處理&#xff1a;保證所有事務都作為一個工作單元來執行&#xff0c;即使出現了故障&#xff0c;都不能改變這種執行方式。當在一個事務中執行多個操作時&#xff0c;要么所有的事務都被提交(commit…

centos6上安裝mysql8.0版本

本博客是采用yum源的方式安裝&#xff0c;非常的方便和快捷。(redhat 與centos7 等操作系統都可以采用此方法&#xff0c;步驟大體一致) mysql官網地址: https://dev.mysql.com 開始安裝&#xff1a; 1.清理環境&#xff0c;查看有沒有之前安裝過的mysql記錄&#xff0c;清理…

koa --- 使用koa-multer上傳文件+elementUI

核心代碼 const upload require(koa-multer) ({dest: ./public/images}); router.post(/upload, upload.single(file), ctx>{console.log(file, ctx.req.file);console.log(body, ctx.req.body);ctx.body 上傳成功; })目錄結構如下 基本思路 1.通過瀏覽器訪問url: http:…