国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

史上最難的一道Java面試題

開發(fā) 后端
在java中,多線程的程序最難理解、調(diào)試,很多時候執(zhí)行結(jié)果并不像我們想象的那樣執(zhí)行。所以在java多線程特別難,依稀記得大學的時候考c語言二級的時候,里面的題目是什么++和很多其他優(yōu)先級的符合在一起問最后的輸出結(jié)果,這類題目就想考一些運行符優(yōu)先級和結(jié)合性問題。

[[221569]]

無意中了解到如下題目,覺得蠻好。

題目如下 

  1. public class TestSync2 implements Runnable {  
  2.    int b = 100;      
  3.  
  4.    synchronized void m1() throws InterruptedException {  
  5.        b = 1000;  
  6.        Thread.sleep(500); //6  
  7.        System.out.println("b=" + b);  
  8.    }  
  9.    synchronized void m2() throws InterruptedException {  
  10.        Thread.sleep(250); //5  
  11.        b = 2000;  
  12.    } 
  13.  
  14.    public static void main(String[] args) throws InterruptedException {  
  15.        TestSync2 tt = new TestSync2();  
  16.        Thread t = new Thread(tt);  //1  
  17.        t.start(); //2  
  18.        tt.m2(); //3  
  19.        System.out.println("main thread b=" + tt.b); //4  
  20.    } 
  21.  
  22.    @Override  
  23.    public void run() {  
  24.        try {  
  25.            m1();  
  26.        } catch (InterruptedException e) {  
  27.            e.printStackTrace();  
  28.        }  
  29.    }  
  30.  

該程序的輸出結(jié)果?

程序輸出結(jié)果 

  1. main thread b=2000  
  2. b=1000 

或 

  1. main thread b=1000 
  2. b=1000 

考察知識點

  • synchronize實例鎖。
  • 并發(fā)下的內(nèi)存可見性。

在java中,多線程的程序最難理解、調(diào)試,很多時候執(zhí)行結(jié)果并不像我們想象的那樣執(zhí)行。所以在java多線程特別難,依稀記得大學的時候考c語言二級的時候,里面的題目是什么++和很多其他優(yōu)先級的符合在一起問***的輸出結(jié)果,這類題目就想考一些運行符優(yōu)先級和結(jié)合性問題。那個背背就行了,但是java多線程還是需要好好理解才行,靠背是不行的。

下面開始簡單分析

該題目涉及到2個線程(主線程main、子線程)、關(guān)鍵詞涉及到synchronized、Thread.sleep。 

synchronized關(guān)鍵詞還是比較復雜的(可能有時候沒有理解到位所以上面題目會有點誤區(qū)),他的作用就是實現(xiàn)線程的同步(實現(xiàn)線程同步有很多方法,它只是一種后續(xù)文章會說其他的,需要好好研究大神Doug Lea的一些實現(xiàn)),它的工作就是對需要同步的代碼加鎖,使得每一次只有一個線程可以進入同步塊(其實是一種悲觀策略)從而保證線程只記得安全性。

一般關(guān)鍵詞synchronized的用法

  • 指定加鎖對象:對給定對象加鎖,進入同步代碼前需要活的給定對象的鎖。
  • 直接作用于實例方法:相當于對當前實例加鎖,進入同步代碼前要獲得當前實例的鎖。
  • 直接作用于靜態(tài)方法:相當于對當前類加鎖,進入同步代碼前要獲得當前類的鎖。

上面的代碼,synchronized用法其實就 屬于第二種情況。直接作用于實例方法:相當于對當前實例加鎖,進入同步代碼前要獲得當前實例的鎖。

可能存在的誤區(qū)

1.由于對synchronized理解的不到為,由于很多時候,我們多線程都是操作一個synchronized的方法,當2個線程調(diào)用2個不同synchronized的方法的時候,認為是沒有關(guān)系的,這種想法是存在誤區(qū)的。直接作用于實例方法:相當于對當前實例加鎖,進入同步代碼前要獲得當前實例的鎖。

2.如果一個調(diào)用synchronized方法。另外一個調(diào)用普通方法是沒有關(guān)系的,2個是不存在等待關(guān)系的。

這些對于后面的分析很有作用。

Thread.sleep

使當前線程(即調(diào)用該方法的線程)暫停執(zhí)行一段時間,讓其他線程有機會繼續(xù)執(zhí)行,但它并不釋放對象鎖。也就是說如果有synchronized同步快,其他線程仍然不能訪問共享數(shù)據(jù)。注意該方法要捕捉異常,對于后面的分析很有作用。

分析流程

java 都是從main方法執(zhí)行的,上面說了有2個線程,但是這里就算修改線程優(yōu)先級也沒用,優(yōu)先級是在2個程序都還沒有執(zhí)行的時候才有先后,現(xiàn)在這個代碼一執(zhí)行,主線程main已經(jīng)執(zhí)行了。對于屬性變量 int b =100由于使用了synchronized也不會存在可見性問題(也沒有必要在說使用volatile申明),當執(zhí)行1步驟的時候(Thread t = new Thread(tt); //1)線程是new狀態(tài),還沒有開始工作。當執(zhí)行2步驟的時候(t.start(); //2)當調(diào)用start方法,這個線程才正真被啟動,進入runnable狀態(tài),runnable狀態(tài)表示可以執(zhí)行,一切準備就緒了,但是并不表示一定在cpu上面執(zhí)行,有沒有真正執(zhí)行取決服務cpu的調(diào)度。在這里當執(zhí)行3步驟必定是先獲得鎖(由于start需要調(diào)用native方法,并且在用完成之后在一切準備就緒了,但是并不表示一定在cpu上面執(zhí)行,有沒有真正執(zhí)行取決服務cpu的調(diào)度,之后才會調(diào)用run方法,執(zhí)行m1方法)。這里其實2個synchronized方法里面的Thread.sheep其實要不要是無所謂的,估計是就為混淆增加難度。3步驟執(zhí)行的時候其實很快子線程也準備好了,但是由于synchronized的存在,并且是作用同一對象,所以子線程就只有必須等待了。由于main方法里面執(zhí)行順序是順序執(zhí)行的,所以必須是步驟3執(zhí)行完成之后才可以到4步驟,而由于3步驟執(zhí)行完成,子線程就可以執(zhí)行m1了。這里就存在一個多線程誰先獲取到問題,如果4步驟先獲取那么main thread b=2000,如果子線程m1獲取到可能就b已經(jīng)賦值成1000或者還沒有來得及賦值4步驟就輸出了可能結(jié)果就是main thread b=1000或者main thread b=2000,在這里如果把6步驟去掉那么b=執(zhí)行在前和main thread b=在前就不確定了。但是由于6步驟存在,所以不管怎么都是main thread b=在前面,那么等于1000還是2000看情況,之后b=1000是一定固定的了。

多線程一些建議

  • 線程也很珍貴,所以建議使用線程池,線程池用的很多,后續(xù)準備分享下,特別重要,需要做到心中有數(shù)。
  • 給線程起名字,當線上cpu高的時候,需要用到高級jstack,如果有名稱就方便很多。
  • 多線程特別需要注意線程安全問題,也需要了解jdk那些是線程安全不安全,那樣使用的時候不會出現(xiàn)莫名其妙問題。

還有一些技巧后續(xù)文章分享在慢慢提,多線程特別重要,也特別難,希望大家也多多花心思在上面。

多線程的一些調(diào)試技巧

由于斷點,所有線程經(jīng)過斷點的時候,都需要停下,導致這個點不停的斷住,很難受,eclispe里面有條件斷點,當滿足條件的時候就可以停下來,那么這樣就方便了。

 

 

關(guān)于線程dump分析以及后續(xù)線程內(nèi)容會在后面繼續(xù)分析分享。 

責任編輯:龐桂玉 來源: 程序人生
相關(guān)推薦

2024-10-11 17:09:27

2023-02-04 18:24:10

SeataJava業(yè)務

2011-05-23 11:27:32

面試題面試java

2009-08-11 14:59:57

一道面試題C#算法

2009-08-11 10:12:07

C#算法

2022-04-08 07:52:17

CSS面試題HTML

2017-11-21 12:15:27

數(shù)據(jù)庫面試題SQL

2009-08-11 15:09:44

一道面試題C#算法

2023-08-01 08:10:46

內(nèi)存緩存

2021-05-31 07:55:44

smartRepeatJavaScript函數(shù)

2021-10-28 11:40:58

回文鏈表面試題數(shù)據(jù)結(jié)構(gòu)

2022-02-08 18:09:20

JS引擎解析器

2021-03-16 05:44:26

JVM面試題運行時數(shù)據(jù)

2011-03-02 10:58:16

SQL server入門面試題

2015-09-02 14:09:19

面試題程序設計

2017-03-10 09:33:16

JavaScript類型

2017-09-13 07:15:10

Python讀寫文件函數(shù)

2021-03-27 10:59:45

JavaScript開發(fā)代碼

2011-06-14 09:12:03

JavaScript

2018-04-26 11:23:01

Linuxfork程序
點贊
收藏

51CTO技術(shù)棧公眾號

国产三级精品在线| 亚洲国产欧美一区| 亚洲aⅴ怡春院| 国产精品制服诱惑| www.久久.com| 亚洲国产成人av| 日本福利视频在线| 黄色成人av网站| 久久久欧美精品| 国产激情在线| 欧美天天综合色影久久精品| 国产三区在线视频| 爽好多水快深点欧美视频| 国产v综合v亚洲欧美久久| 九七电影院97理论片久久tvb| 欧美日韩高清一区| 色综合久久久久久久久久久| 欧美极品少妇xxxxⅹ喷水| 国产精品剧情一区二区在线观看| 欧美亚洲免费| 亚洲女在线观看| 日本不卡免费播放| 丁香激情综合五月| 国产精品一级久久久| 国产a亚洲精品| 欧美三级蜜桃2在线观看| 91免费版看片| 蜜臀av一区二区在线观看| 国产精品久久久久久久久男| 91精品精品| 国产99久久久久久免费看农村| 国产欧美久久久精品影院| 欧美另类第一页| 性感美女一区二区在线观看| 中文字幕亚洲欧美| 色琪琪一区二区三区亚洲区| 国产精品wwwww| 国产成人aaaa| 91亚洲精品国产| 久久爱www久久做| 亚洲午夜精品国产| 天堂影院一区二区| 欧美视频精品全部免费观看| 高清欧美性猛交| xx欧美xxx| 中文字幕av一区中文字幕天堂| 香蕉视频网站入口| 久久久99精品久久| 免费看黄色一级大片| 久久这里都是精品| 午夜免费精品视频| 成人欧美一区二区三区白人| www.日本xxxx| 亚洲激情自拍视频| 污视频在线看操| 欧美色网站导航| 欧美24videosex性欧美| 亚洲欧美在线播放| 日本高清精品| 国产精品无av码在线观看| 亚洲精品免费网站| 精品五月天久久| 日本三级一区| 成人免费毛片app| 青青青草原在线| 黄视频在线播放| 亚洲欧美综合另类中字| 精品69视频一区二区三区| 91精品影视| 成人av免费在线观看| 91福利在线免费| 超碰96在线| 在线欧美小视频| 九九色在线视频| 欧美日本黄视频| 不卡一区2区| 日韩精品久久一区| 久久综合久久综合九色| 在线资源av| 日韩欧美一卡二卡| 国产成人精品一区二区三区视频 | 国产成人av网址| 欧美大片aaaa| 五月天亚洲综合| 久久久精品人体av艺术| 婷婷亚洲一区二区三区| 亚洲精品一区二区三区影院| 欧美性片在线观看| 欧美人xxxxx| av电影在线观看完整版一区二区| 特黄特色特刺激视频免费播放| 欧美肥胖老妇做爰| 台湾佬中文娱乐久久久| 国产精品视频大全| 成人av在线网| 国产日韩精品在线看| 欧美插天视频在线播放| 日韩在线看片| 欧美极品欧美精品欧美图片| 色偷偷久久一区二区三区| 91综合在线| 欧美一区国产一区| 欧美色图天堂网| 99视频精品全国免费| 免费欧美一级视频| 亚洲国产精品推荐| 99久久999| 欧美精品一区二区视频| 色综合久久九月婷婷色综合| 中文av一区特黄| 欧美三级午夜理伦三级老人| 日本在线视频一区二区| 福利二区91精品bt7086| 亚洲一区二区三区免费| 午夜精品久久久久影视| 日韩理论片在线观看| 99久久er热在这里只有精品66| 影音先锋电影在线观看| 中国人与牲禽动交精品| 今天的高清视频免费播放成人| 欧美 国产 日本| 日韩一区二区精品| av影片在线一区| 青青青在线播放| 亚洲精品按摩视频| 欧美午夜不卡影院在线观看完整版免费| 欧美大片在线播放| 欧美一激情一区二区三区| 欧美电影免费| 高清一区二区视频| 亚洲午夜激情免费视频| 久久精品官网| 国产美女极品在线| 国产无遮挡又黄又爽免费软件 | 欧美在线免费看视频| 日韩欧美视频一区二区| 香蕉久久一区二区不卡无毒影院| 91九色综合| 亚洲国产综合自拍| 欧美性感一区二区三区| 欧美日韩一二三四| 在线免费观看视频黄| 亚洲视频第一页| 日本vs亚洲vs韩国一区三区| 午夜在线免费观看视频| 91青青草免费在线看| 欧美日韩中文字幕在线| 久久在线播放| 欧美色18zzzzxxxxx| 国产精自产拍久久久久久| 亚洲人精品一区| 真实原创一区二区影院| 91国内视频| 国产精品日日做人人爱| 亚洲国产人成综合网站| 成人激情开心网| 中文字幕中文字幕在线中文字幕三区| 98精品在线视频| 欧美经典一区二区| 欧美激情久久久久久久久久久| 欧美伦理片在线观看| 国精产品999国精产品官网| 国内精品久久久久久中文字幕| 国产亚洲精品中文字幕| 日本免费成人| 免费在线观看毛片网站| 欧美日韩aaaa| 成人欧美一区二区三区在线播放| 神马久久av| jizz欧美大全| 91亚洲国产成人精品性色| 精品久久久久久久久国产字幕 | 欧美激情综合在线| 麻豆国产一区二区三区四区| 农村妇女精品一二区| 91av在线影院| 午夜精品一区二区三区免费视频 | 成人线上视频| 久草资源站在线观看| 97精品国产97久久久久久| 一区二区三区四区在线| 欧美日韩99| 电影k8一区二区三区久久| 国内少妇毛片视频| 美女黄色丝袜一区| 亚洲欧美日本在线| 欧美在线1区| 亚洲涩涩在线| 国产原创精品在线| 91精品入口蜜桃| 精品无人区乱码1区2区3区在线| 久久色.com| 久久亚洲国产| 亚洲婷婷噜噜| 久久无码高潮喷水| 国产精品欧美激情| 日韩一区和二区| 99精品偷自拍| 欧美xxxx中国| av在线加勒比|