国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java多線程中常見的幾個問題

2019-11-26 15:12:15
字體:
來源:轉載
供稿:網友

我們都知道,在java中要想實現多線程,有兩種手段,一種是繼續Thread類,另外一種是實現Runable接口。
  1.進程和線程的區別是什么?
  進程是執行著的應用程序,而線程是進程內部的一個執行序列。一個進程可以有多個線程。線程又叫做輕量級進程。
  2.創建線程有幾種不同的方式?你喜歡哪一種?為什么?
有三種方式可以用來創建線程:
(1)繼承Thread
(2)實現Runnable接口
(3)應用程序可以使用Executor框架來創建線程池
實現Runnable接口這種方式更受歡迎,因為這不需要繼承Thread類。在應用設計中已經繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實現接口。同時,線程池也是非常高效的,很容易實現和使用。
  3.概括的解釋下線程的幾種可用狀態。
線程在執行過程中,可以處于下面幾種狀態:
就緒(Runnable):線程準備運行,不一定立馬就能開始執行。
運行中(Running):進程正在執行線程的代碼。
等待中(Waiting):線程處于阻塞的狀態,等待外部的處理結束。
睡眠中(Sleeping):線程被強制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待獲取鎖。
死亡(Dead):線程完成了執行。
  4.同步方法和同步代碼塊的區別是什么?
  在Java語言中,每一個對象有一把鎖。線程可以使用synchronized關鍵字來獲取對象上的鎖。synchronized關鍵字可應用在方法級別(粗粒度鎖)或者是代碼塊級別(細粒度鎖)。
  5.在監視器(Monitor)內部,是如何做線程同步的?程序應該做哪種級別的同步?
  監視器和鎖在Java虛擬機中是一塊使用的。監視器監視一塊同步代碼塊,確保一次只有一個線程執行同步代碼塊。每一個監視器都和一個對象引用相關聯。線程在獲取鎖之前不允許執行同步代碼。
  6.什么是死鎖(deadlock)?
  兩個進程都在等待對方執行完畢才能繼續往下執行的時候就發生了死鎖。結果就是兩個進程都陷入了無限的等待中。
  7.如何確保N個線程可以訪問N個資源同時又不導致死鎖?
  使用多線程的時候,一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,并強制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現死鎖了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杨浦区| 疏附县| 东兰县| 余庆县| 图们市| 常宁市| 云浮市| 大同县| 武汉市| 淮安市| 定西市| 锡林郭勒盟| 芒康县| 伊宁县| 抚宁县| 石泉县| 来宾市| 探索| 平南县| 垦利县| 湛江市| 建平县| 边坝县| 连南| 顺昌县| 南丹县| 那坡县| 宜章县| 天门市| 乐业县| 万盛区| 永川市| 蚌埠市| 临泉县| 苍南县| 黎平县| 海城市| 新巴尔虎左旗| 耒阳市| 南宁市| 彭阳县|