鹏仔先生-趣站-一个有趣的网站!
鹏仔先生

鹏仔先生

当前位置:网站首页 > 文字大全 > 正文

文言文服阙

作者:百变鹏仔日期:2023-07-26 01:14:55浏览:8分类:文字大全

文言文服阙

1. 服阙是什么意思

服阕是一个汉语词语,读音是fú què,意思是指守丧期满除服。

该词语在《贞节先生陈留范史云铭》和《梁书· 韦放传》等文献均有记载。 服阕què:又叫“服除”,守丧期满除去孝服。

阕﹐终了。《旧唐书·王丘传》:“丁父忧去职,服阕,拜右散骑常侍,仍知制诰。”

官员守制期满,官拜右散骑常侍,对于他们来说是一次仕途上的新起点。

扩展资料:

服阕制度 1、复:为死者招魂的仪式。

招魂时复者拿着死者的衣服,一手执领,一手执腰,面向幽冥世界所在的北方,拉长声音高呼死者的名字,叫他的灵魂回来。反复多次。

然后由另一个人接过衣服,给死者穿上。这一仪式是表示为挽回死者的生命而作最后一次努力。

2、殓:复后把死者遗体安放在正寝南窗下的床上,用角柶插入死者上下齿之间,把口撑开,以便日后饭含,为楔齿。用燕几固定死者双足,以便日后着履,为缀足。

后用特制的殓衾覆盖尸体,为殓。 还要在尸体东侧设酒食,供鬼魂饮用,在堂上设帷帐,把死者和生人隔开。

死者家属脱掉华美的衣服,除去装饰品,易服布素,开始居丧。 3、命赴:派人向死者的上级、亲属和朋友报丧。

后世赴写作讣,以丧主的名义用书面形式发出,称讣告、讣文。丧主一般是死者的儿子,由长子领头,父丧称孤子,母丧称哀子,母或父已 百度百科——服阕。

2. 文言文服字怎么翻译

1、服从、服侍。

(会意。甲骨文会意,以手按住某人低头向案,服从、服侍意,金文或讹案为舟,小篆从此。)

2、服从,顺服 [obey;submit (oneself) to]。敌已服矣。

——《吕氏春秋·论威》以一服八。——《孟子·梁惠王上》以力服人者,非心服也。

——《孟子·公孙丑上》当舜之时,有苗不服。——《韩非子·五蠹》授之政,西土服。

——《墨子·尚贤》远人不服而不能来也。——《论语·季氏》强国请服,弱国入朝。

——汉· 贾谊《过秦论》3、又如:服听(服从听命);服低(屈服;低头);服杀(折服;倾倒。杀:用在动词后,表示程度深);服主(轻易服输的人);服属(顺从归属)。

4、佩服;信服;使信服 [be convinced;convice]毛遂比至 楚,与十九人议论,十九人皆服。——《史记·平原君虞卿列传》后数日驿至,果地震陇西,于是皆服其妙。

—— 范晔《后汉书·张衡传》服人如何?——《论衡·问孔》5、又如:以理服人;心服(衷心信服);悦服(从心里佩服);服众(使众人心服);服善(佩服、顺从别人的长处);不服输。6、使用 [use]诸侯御荼,大夫服笏。

——《荀子·大略》子弟犹归器,衣服裘衾车马,则必献其上,而后敢服用其次也。——《礼记·内则》7、从事;致力 [be engaged in]以德就利,以官服事。

——《墨子·尚贤》有事,弟子服其劳。——《论语》肇牵车牛,运服贾。

——《书·酒诰》8、又如:服田(从事耕作,种田);服官(做官);服贾(从商,作买卖);服劳(服事效劳);服休(侍侯帝王宴息的近臣)9、饮用或吞服药物 [take]即作汤二升,先服一升。——《三国志·方伎传》众人…便知他有不足之症,因问:“常服何药?”——《红楼梦》。

又如:服毒;服饵(服食丹药);服鸩(饮毒酒自杀);服食(服用饮食之物)10、担任;承当 [serve as]若农服田力穑。——《书·盘庚上》11、又如:服劳(服事效劳);服职(供职)12、招认,承认,肯定,认可 [admit]于是傅付许狱,考验首服。

——《三国志·方伎传》13、又如:服过(承认自己的过错);服辩(认罪供状);服词(承认罪责之词)14、穿着 [put on]朝服衣冠,窥镜。——《战国策·齐策》亦不敢服垢弊以矫俗干名,但顺吾性而已。

——宋· 司马光《训俭示康》昨望见妇女犹服夹领小袖。——《资治通鉴》15、又如:服卉(穿着用絺葛制的衣裳);服孝(带孝。

穿孝服);服冕(穿着冕服)16、佩带 [wear]服太阿之剑。——秦· 李斯《谏逐客书》17、又如:服玉(佩玉);服媚(喜爱佩带);服剑(随身佩带的宝剑)18、铭记,怀念 [engrave on one's mind;always remember]得一善,则拳拳服膺,而弗之矣。

——《中庸》19、又如:服膺(铭记在心)20、任用 [appoint]忠臣危殆,谗人服矣。——《荀子》21、实行;施行 [carry out]此古服道致士之法也。

——《战国策·燕策一》22、又如:服行(施行,实行)23、执持 [hold]。如:服臧(持着脏物)24、得 [get]明者固能察极,知人之所不能知,服人之所不能得。

——马王堆 汉墓帛书《道原》25、使习惯于 [be accustomed to]后皇嘉树,橘徕服兮。——《楚辞··九章·橘颂》26、又如:不服水土27、承受,忍受,遭受,接受[刑役] [serve]。

如:白起知己前罪,服更后罚也。——《论衡.祸虚》释舟楫之安,而服车马之劳。

——宋·苏轼《超然台记》28、遵从;遵守 [ply with]。如:服习(遵循习尚);服善(遵行善道);服礼(遵行礼法);服度(遵守礼法)29、通“负”( fù)。

负荷;驾驶 [drive]服牛乘马,引重致远,以利天下。——《易·系辞下》再鼓,服辇载粟而至。

——《淮南子·人间》30、又如:服牛乘马(役使牛马驾车);服辂,服舆(驾车);服驯(驾驭车马);服御(驾驶车马)31、通“覆”( fù)。遮盖,掩蔽 [overspread;cover]道逢辇者,以其辇服其道。

——《韩诗外传》32、通“备”(bèi),古代汉语“服”字,去声,读备(今简体字为备)。音近逼,即匐。

1949年以前,京剧扮演主仆者,主人出行,命仆说:‘服马。’即古语遗义,此“服”意即“备”意——黄现璠著《古书解读初探》〈名〉1、衣服,服装[clothes]甘其食,美其服。

——《老子》八十章长者加以金银华美之服,輙羞赧弃去之。——宋· 司马光《训俭示康》余幼好此奇服兮,年既老而不衰。

——《楚辞·屈原·涉江》2、又如:工作服;服乘(指衣服车马);服养(衣服与食物);服御(指衣服、车马等器物)。又指丧服会仲孺有服。

(有服:有丧服在身。)——《史记·武安侯传》3、事情 [thing]不学杂服,不能安礼。

——《礼记·学记》4、服丧 [mourning]三年服阙。——《风俗通·十反》服阙,服全椒长。

——《后汉书·刘平传》5、又如:服满(服阙。服丧期满);服制(服丧制度。

按生者与死者关系的远近亲疏,分为斩衰、齐衰、大功、小功、缌麻五等);服除(服丧期满);服假(丧假)6、古代一车驾四马,居中的两匹叫“服” [o horses are placed in the middle of four for driving a carrige in ancient times]两服上襄。(上襄:指马头昂举。)

——《诗·郑风 》7、通“箙。

3. 江革传文言文翻译服阕与观俱诣太学的诣是什么意思

诣: 到,旧时特指到尊长那里去:

江革传梁书列传

江革字休映,济阳考城人也。革幼而聪敏,六岁便解属文。九岁丁父艰,与弟观同生,少孤贫,自相训勖,读书精力不倦。十六丧母,以孝闻。服阕,与观俱诣太学,补国子生,举高第。齐吏部谢朓雅相钦重。朓尝宿卫,还过候革,时大雪,见革弊絮单席,而耽学不倦,乃脱所着襦,并手割半毡与革充卧具而去。

除少府卿,出为镇北豫章王长史,随府王镇彭城。城既失守,革素不便马,乃泛舟而还,途经下邳,遂为魏人所执。魏徐州刺史元延明闻革才名,厚加接待。革称患脚不拜,延明将加害焉,见革辞色严正,更相敬重。延明令革作祭彭祖文,革辞以囚执既久,无复心思。延明逼之逾苦,将加箠扑。革厉色而言曰:“江革行年六十,不能杀身报主,今日得死为幸,誓不为人执笔。”延明知不可屈,乃止,日拾脱粟三升,仅余性命。值魏主请中山王元略反北,乃放革还朝。

时武陵王在东州,颇自骄纵,上召革面敕曰:“武陵王年少,臧盾性弱,不能匡正,欲以卿代为行事。”乃除武陵王长史、会稽郡丞。革门生故吏,家多在东州,闻革应至,并赍持缘道迎候。革曰:“我通不受饷,不容独当故人筐篚。”至镇,惟资公俸,食不兼味。郡境殷广,辞讼日数百,革分判辨析,曾无疑滞。功必赏,过必罚,民安吏畏,百城震恐。府王惮之,遂雅相钦重。将还,民皆恋惜之,赠遗无所受。送故依旧订舫,革并不纳,惟乘台所给一舸。舸艚偏欹,不得安卧。或谓革日:“船既不平,济江甚险,当移徙重物,以迮轻艚。”革既无物,乃于西陵岸取石十余片以实之。其清贫如此。

征入为度支尚书。时尚书令何敬容掌选,序用多非其人。革性强直,每至朝宴,恒有褒贬,以此为权势所疾,乃谢病还家。大同元年卒。革历官八府长史,四王行事,傍无姬侍,家徒壁立,世以此高之。(节选自《梁书?列传第三十》)

译文

江革,字休映,是济阳考城人。江革自幼聪明敏捷,六岁便能写文章。九岁时父亲去世,与弟江观孪生,年少孤苦贫穷,兄弟互相勉励,读书精力充沛毫不疲倦。十六岁时母亲又去世,因服丧有孝行而闻名。服丧期满后,与江观一起前往太学,补为国子生,并在考核中取得优秀的次第成绩。齐朝吏部谢朓十分钦佩器重他。谢朓曾在宫中宿卫,回来时去探望江革,当时下着大雪,看见江革穿着破旧的棉衣,铺着一层坐席,却沉迷于学习不知疲倦,便脱下所穿短袄(给江革披上),并亲手把毡子割下一半给江革充当卧具,然后才离开。

江革被授予少府卿,出任镇北豫章王长史,并随府王镇守彭城。彭城失守后,江革因一向不熟习骑马,就乘船而回,途经下邳时,竟被魏人俘获。魏朝徐州刺史元延明听说过江革的才名,对他厚加接待。江革称患有脚病不向他施礼参拜,元延明想要加害他,见江革辞色严正,就更加敬重他。元延明让江革写祭彭祖的文章,江革以被囚禁的时间太久,没有心思写作为由推辞。于是元延明逼他更加厉害,将要对他施以鞭杖之刑。江革厉色说道:“我今年已经六十,不能杀身报效君主,今日以死为幸事,誓不替人执笔写作。”元延明知道不能使他屈服,就取消了鞭杖。每天只给江革糙米三升,仅能维持性命而已。正值魏帝请求梁朝让中山王元略返回北方,于是就释放江革还朝。

当时武陵王在东州,极为骄傲任性,高祖召见江革当面吩咐他说:“武陵王年少(任性),而臧盾性情软弱,不能尽其辅佐之责,想让你替代臧盾(辅佐武陵王)。”于是授予江革武陵王长史、会稽郡丞。江革的门生故吏,家大多在东州,听说江革将要到来,都携带礼物沿途迎候。江革说:“我一概不接受馈赠,我不能成为故人的礼品筐。”到任之后,江革只依靠官俸过日子,吃得也很简单。会稽郡殷实富裕,地广人众,诉讼案件每天多达数百起,江革分类判案,从无疑案积压。江革有功必赏,有过必罚,百姓安居,官吏畏惧,百城都敬畏他。(就连)武陵王也害怕他,极为敬重他。江革将要返回京都时,百姓都恋恋不舍,赠送的礼物江革一概不接收。送行故吏,按旧例要定做新船,江革并不采纳,只乘坐官府给的一条小船。船舱已经偏斜,不能安卧。有人对江革说:“船不平稳,渡江极其危险,应当搬重物来压住小船。”江革没有重物,便在西陵岸边搬取十多块石头来使船只充实加重。他就是如此清贫。

(江革)入朝任度支尚书。当时尚书令何敬容掌管选拔人才,录用的人大多都不合适。江革性格刚强正直,每次到朝宴的时候,总有褒贬之言,因此被有权势的人憎恨,于是江革称病返回家乡。大同元年去世。江革历任八府长史,四王行事,身旁却没有侍妾,家徒四壁,世人因此敬重他。

4. 高中文言文 阕 这个字有哪些意思

●阕

(阕)

què ㄑㄩㄝˋ

◎ 停止,终了:乐阕。服阕(古代三年之丧满)。

◎ 量词,歌曲或词,一首为一阕;一首词的一段亦称一阕,前一段称“上阕”,后一段称“下阕

详细字义

◎阕

〈动〉

(1) (形声。从门,癸( guǐ)声。本义:祭事结束而闭门)

(2) 同本义。引申为止息;终了 [cease;end]

阕,事已闭门也。——《说文》

瞻彼阕者,虚室生白,吉祥止止。——《庄子·人间世》

繁肴既阕,亦有寒羞。——张协《七命》

(3) 尽;无剩余 [exhaust]

俾民心阕。——《诗·小雅·节南山》

物物卬市,日阙亡储。——《汉书》。颜师古注:“阕,尽也。日阕,言当日即尽,不蓄积也。”

(4) 旧指服丧期满 [(mourning term) end]

于是三年礼阕,乃相与刊勒金石。——《山阳太守祝睦后碑》

(5) 乐终[stop]

阕,曲终为阕。——《古今韵会举要》

主人答拜,乐阕。——《仪礼》

词性变化

◎阕

阕 què

〈名〉

(1) 乐曲 [word]

歌数阕。——《史记·留侯世家》

曲终阕尽,余弦更兴。——汉· 马融《长笛赋》

歌曲以阕为称。——宋· 吴曾《能改斋漫录》

(2) 乐一遍为一阕 [turn]

昔葛天氏之乐,三人操牛尾投足以歌八阕。——《吕氏春秋》

(3) 空隙 [gap]

瞻彼阕者,虚室生白。——《庄子》

◎阕

〈量〉

(1) 歌曲或词一首叫一阕。如:弹琴一阕;填一阕词

(2) 一首词的一段叫一阕。如:上阕;下阕

5. 古文中服 用法

◎ 服 fú 〈动〉(1) (会意。

古文从舟,兼做声符。本义:舟两旁的夹木)(2) 服从,顺服 [obey;submit (oneself) to] 敌已服矣。

——《吕氏春秋·论威》以一服八。——《孟子·梁惠王上》以力服人者,非心服也。

——《孟子·公孙丑上》当舜之时,有苗不服。——《韩非子·五蠹》授之政,西土服。

——《墨子·尚贤》远人不服而不能来也。——《论语·季氏》强国请服,弱国入朝。

——汉· 贾谊《过秦论》(3) 又如:服听(服从听命);服低(屈服;低头);服杀(折服;倾倒。杀:用在动词后,表示程度深);服主(轻易服输的人);服属(顺从归属)(4) 佩服;信服;使信服 [be convinced;convice] 毛遂比至 楚,与十九人议论,十九人皆服。

——《史记·平原君虞卿列传》后数日驿至,果地震陇西,于是皆服其妙。—— 范晔《后汉书·张衡传》服人如何?——《论衡·问孔》(5) 又如:以理服人;心服(衷心信服);悦服(从心里佩服);服众(使众人心服);服善(佩服、顺从别人的长处);不服输(6) 使用 [use] 诸侯御荼,大夫服笏。

——《荀子·大略》子弟犹归器,衣服裘衾车马,则必献其上,而后敢服用其次也。——《礼记·内则》(7) 从事;致力 [be engaged in] 以德就利,以官服事。

——《墨子·尚贤》有事,弟子服其劳。——《论语》肇牵车牛,运服贾。

——《书·酒诰》(8) 又如:服田(从事耕作,种田);服官(做官);服贾(从商,作买卖);服劳(服事效劳);服休(侍侯帝王宴息的近臣)(9) 饮用或吞服药物 [take] 即作汤二升,先服一升。——《三国志·方伎传》众人…便知他有不足之症,因问:“常服何药?”——《红楼梦》。

又如:服毒;服饵(服食丹药);服鸩(饮毒酒自杀);服食(服用饮食之物)(10) 担任;承当 [serve as] 若农服田力穑。——《书·盘庚上》(11) 又如:服劳(服事效劳);服职(供职)(12) 招认,承认,肯定,认可 [admit] 于是傅付许狱,考验首服。

——《三国志·方伎传》(13) 又如:服过(承认自己的过错);服辩(认罪供状);服词(承认罪责之词)(14) 穿着 [put on] 朝服衣冠,窥镜。——《战国策·齐策》亦不敢服垢弊以矫俗干名,但顺吾性而已。

——宋· 司马光《训俭示康》昨望见妇女犹服夹领小袖。——《资治通鉴》(15) 又如:服卉(穿着用絺葛制的衣裳);服孝(带孝。

穿孝服);服冕(穿着冕服)(16) 佩带 [wear] 服太阿之剑。——秦· 李斯《谏逐客书》(17) 又如:服玉(佩玉);服媚(喜爱佩带);服剑(随身佩带的宝剑)(18) 铭记,怀念 [engrave on one's mind;always remember] 得一善,则拳拳服膺,而弗之矣。

——《中庸》(19) 又如:服膺(铭记在心)(20) 任用 [appoint] 忠臣危殆,谗人服矣。——《荀子》(21) 实行;施行 [carry out] 此古服道致士之法也。

——《战国策·燕策一》(22) 又如:服行(施行,实行)(23) 执持 [hold]。如:服臧(持着脏物)(24) 得 [get] 明者固能察极,知人之所不能知,服人之所不能得。

——马王堆 汉墓帛书《道原》(25) 使习惯于 [be accustomed to] 后皇嘉树,橘徕服兮。——《楚辞·屈原·九章·橘颂》(26) 又如:不服水土(27) 承受[刑役] [serve]。

如:服更(承受;接受)(28) 遵从;遵守 [ply with]。如:服习(遵循习尚);服善(遵行善道);服礼(遵行礼法);服度(遵守礼法)(29) 通“负”( fù )。

负荷;驾驶 [drive] 服牛乘马,引重致远,以利天下。——《易·系辞下》再鼓,服辇载粟而至。

——《淮南子·人间》(30) 又如:服牛乘马(役使牛马驾车);服辂,服舆(驾车);服驯(驾驭车马);服御(驾驶车马)(31) 通“覆”( fù )。遮盖,掩蔽 [overspread;cover] 道逢辇者,以其辇服其道。

——《韩诗外传》词性变化 ◎ 服 fú 〈名〉(1) 衣服,服装[clothes] 甘其食,美其服。——《老子》八十章 长者加以金银华美之服,輙羞赧弃去之。

——宋· 司马光《训俭示康》余幼好此奇服兮,年既老而不衰。——《楚辞·屈原·涉江》(2) 又如:工作服;服乘(指衣服车马);服养(衣服与食物);服御(指衣服、车马等器物)。

又指丧服 会仲孺有服。(有服:有丧服在身。)

——《史记·武安侯传》(3) 事情 [thing] 不学杂服,不能安礼。——《礼记·学记》(4) 服丧 [mourning] 三年服阙。

——《风俗通·十反》服阙,服全椒长。——《后汉书·刘平传》(5) 又如:服满(服阙。

服丧期满);服制(服丧制度。按生者与死者关系的远近亲疏,分为斩衰、齐衰、大功、小功、缌麻五等);服除(服丧期满);服假(丧假)(6) 古代一车驾四马,居中的两匹叫“服” [o horses are placed in the middle of four for driving a carrige in ancient times] 两服上襄。

(上襄:指马头昂举。)——《诗·郑风 》(7) 通“箙”。

盛箭之器 [quiver] 四牡翼翼,象弭鱼服。——《诗·小雅·采薇》衣三属之甲,操十二石之弩,负服五十个,置戈其上,冠胄带剑,赢三日之粮,日中而趋百里。

——《荀子·议兵》(8) 又如:服无矢(箭筒内无箭。形容实力不强大)(9) 通“鵩”。

6. 文言文 宋史

和岘,字晦仁,开封浚仪人。父凝,晋宰相、太子太傅、鲁国公。岘生之年,适会凝入翰林、加金紫、知贡举,凝喜曰:“我平生美事,三者并集,此子宜于我也。”因名之曰三美。七岁,以门荫为左千牛备身,迁著作佐郎。汉乾佑初,加朝散阶。十六,登朝为著作郎。丁父忧,服阕,拜太常丞。

建隆初,授太常博士,从祀南郊,赞导乘舆,进退闲雅。太祖谓近侍曰:“此谁氏之子,熟于赞相?”左右即以岘门阀对。俄拜刑部员外郎兼博士,仍判太常寺。

乾德元年十一月甲子,有事于南郊。丁丑冬至,有司复请祀昊天上帝,诏岘议其礼,岘以祭义戒于烦数,请罢之。二年,议孝明、孝惠二后神主祔于别庙,岘以旧礼有二后同庙之文,无各殿异室之说,今二后同祔别庙,亦宜共殿别室。孝明皇后尝母仪天下,宜居上室。孝惠皇后止以追尊,当居次室。从之。三年春,初克夔州,以内衣库使李光睿权知州,岘通判州事。代还,是岁十二月十四日戊戌腊,有司以七日辛卯蜡百神,岘献议正之。四年,南郊,岘建议望燎位置爟火。

先是,王朴、窦俨洞晓音乐,前代不协律吕者多所考正。朴、俨既没,未有继其职者。会太祖以雅乐声高,诏岘讲求其理,以均节之,自是八音和畅,上甚嘉之。语具《律志》。乐器中有叉手笛者,上意欲增入雅乐,岘即令乐工调品,以谐律吕,其执持之状如拱揖然,请目曰“拱辰管”,诏备于乐府。岘性苛刻鄙吝,好殖财,复轻侮人,尝以官船载私货贩易规利。初为判官郑同度论奏,既而彰信军节度刘遇亦上言,按得实,坐削籍,配隶汝州。

六年,起为太常丞,分司西京,复阶勋章服。端拱初,上躬耕籍田,岘奉留司贺表至阙下,因以其所著《奉常集》五卷、《秘阁集》二十卷、《注释武成王庙赞》五卷奏御,上甚嘉之,复授主客郎中,判太常寺兼礼仪院事。

是秋得暴疾,卒,年五十六。

和岘,字晦仁,开封浚仪人。父亲和凝,是后晋的宰相、太子太傅、鲁国公。和岘出生那年,正好遇上和凝进入翰林、加赐金紫、知贡举。和凝高兴地说:“我平生美事,三样一起来了,这孩子适合我。”因此给和岘取名为“三美”。和岘七岁,恩荫得官左千牛备身,升为著作佐郎。后汉乾祐初年,加朝散官阶。和岘十六岁,为著作郎。父亲去世,服丧期满后,担任太常丞。建隆初年,和岘授官为太常博士,随从皇上在南郊祭祀,辅助行礼,引导乘舆,进退从容优雅。太祖对近侍说:“这是谁家的孩子,这么精于行礼引导?”左右就把和岘的门第回报太祖。不久,和岘授官刑部员外郎兼博士,仍判太常寺。乾德元年(963年)十一月甲子,在南郊祭天。丁丑冬至,有关部门又请求祭祀昊天上帝,诏令和岘议定礼制。和岘认为祭祀的要义是避免烦琐,请求停止这项祭祀。乾德二年,议论孝明、孝惠两位皇后的神位归附到祖庙以外的庙堂,和岘认为旧礼有二后同庙的条例,没有分殿异室之说,如今二后一同归附到另外的庙堂,也应该同一庙殿而各居一室。孝明皇后曾经母仪天下,应该居上室。孝惠皇后仅仅是追封尊号,应当居次室。皇上同意他的意见。乾德三年春,刚攻下夔州,任命内衣库使李光睿暂任知州,和岘任通判州事。任满还朝,这年十二月十四日戊戌腊月,有关部门在七日辛卯蜡祭百神,和岘呈上建议纠正这一错误。四年,在南郊祭祀,和岘建议在望祭、燎祭的位置安置火炬。以前,王朴、窦俨精通音乐,考订过许多前代不和乐律的乐章。王朴、窦俨死后,没有继承他们职位的人。适逢太祖认为雅乐的声调过高,诏令和岘来考求原理,用调律器调音,从此八音和谐顺畅,皇上非常赞赏他。这些在《律志》中有详细记载。有种叫叉手笛的乐器,皇上想把它增加进雅乐演奏的乐器中,和岘马上命令乐工调音,与乐律相协调,手持这种乐器演奏的样子就像是在拱手作揖,和岘请求起名为“拱辰管”,皇上下诏把它放在乐府内。开宝初年,和岘升为司勋员外郎、代理泗州知州,判吏部南曹,历任夔州、晋州二州通判。开宝九年,江南被平定,和岘受诏担任采访使。太宗即位,和岘升为主客郎中。太平兴国二年,从兖州知州,改任京东转运使。和岘性情苛刻吝啬,喜欢聚敛钱财,又轻视欺侮人,曾经用官船载私货贩卖谋取钱财。起初被判官郑同度论罪上奏,后来彰信军节度刘遇也上言,追查核实情况后,和岘被革职除名,流放到汝州。太平兴国六年,和岘被起用为太常丞,分司西京,回复官阶恩赏朝服。端拱初年,皇上躬耕籍田,和岘送留司官员贺表到宫中,并借机把自己所著的《奉常集》五卷、《秘阁集》二十卷、《注释武成王庙赞》五卷奏上御览,皇上很赞赏他,又授官主客郎中,判太常寺兼礼仪院事。这年秋天和岘得了重病去世,享年五十六岁。

1. 各种同步控制工具的使用

1.1 ReentrantLock?

ReentrantLock感觉上是synchronized的增强版,synchronized的特点是使用简单,一切交给JVM去处理,但是功能上是比较薄弱的。在JDK1.5之前,ReentrantLock的性能要好于synchronized,由于对JVM进行了优化,现在的JDK版本中,两者性能是不相上下的。如果是简单的实现,不要刻意去使用ReentrantLock。

相比于synchronized,ReentrantLock在功能上更加丰富,它具有可重入、可中断、可限时、公平锁等特点。

首先我们通过一个例子来说明ReentrantLock最初步的用法:

package test;

import java.util.concurrent.locks.ReentrantLock;public class Test implements Runnable{public static ReentrantLock lock = new ReentrantLock();public static int i = 0;

@Overridepublic void run(){for (int j = 0; j

{lock.lock();try

{

i++;

}finally

{lock.unlock();

}

}

}

public static void main(String[] args) throws InterruptedException{

Test test = new Test();

Thread t1 = new Thread(test);

Thread t2 = new Thread(test);

t1.start();

t2.start();

t1.join();

t2.join();

System.out.println(i);

}

}

有两个线程都对i进行++操作,为了保证线程安全,使用了?ReentrantLock,从用法上可以看出,与?synchronized相比,ReentrantLock就稍微复杂一点。因为必须在finally中进行解锁操作,如果不在?finally解锁,有可能代码出现异常锁没被释放,而synchronized是由JVM来释放锁。

那么ReentrantLock到底有哪些优秀的特点呢?

1.1.1 可重入

单线程可以重复进入,但要重复退出

lock.lock();

lock.lock();try{

i++;

}

finally{

lock.unlock();

lock.unlock();

}

由于ReentrantLock是重入锁,所以可以反复得到相同的一把锁,它有一个与锁相关的获取计数器,如果拥有锁的某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放(重入锁)。这模仿了?synchronized?的语义;如果线程进入由线程已经拥有的监控器保护的 synchronized 块,就允许线程继续进行,当线程退出第二个(或者后续)?synchronized?块的时候,不释放锁,只有线程退出它进入的监控器保护的第一个synchronized?块时,才释放锁。

public class Child extends Father implements Runnable{ final static Child child = new Child();//为了保证锁唯一

public static void main(String[] args) { for (int i = 0; i

}

}

public synchronized void doSomething() {

System.out.println("1child.doSomething()");

doAnotherThing(); // 调用自己类中其他的synchronized方法

}

private synchronized void doAnotherThing() { super.doSomething(); // 调用父类的synchronized方法

System.out.println("3child.doAnotherThing()");

}

@Override

public void run() {

child.doSomething();

}

}class Father { public synchronized void doSomething() {

System.out.println("2father.doSomething()");

}

}

我们可以看到一个线程进入不同的?synchronized方法,是不会释放之前得到的锁的。所以输出还是顺序输出。所以synchronized也是重入锁

输出:

1child.doSomething()

2father.doSomething()

3child.doAnotherThing()

1child.doSomething()

2father.doSomething()

3child.doAnotherThing()

1child.doSomething()

2father.doSomething()

3child.doAnotherThing()

...

1.1.2.可中断

与synchronized不同的是,ReentrantLock对中断是有响应的。中断相关知识查看[高并发Java 二] 多线程基础

普通的lock.lock()是不能响应中断的,lock.lockInterruptibly()能够响应中断。

我们模拟出一个死锁现场,然后用中断来处理死锁

package test;import java.lang.management.ManagementFactory;import java.lang.management.ThreadInfo;import java.lang.management.ThreadMXBean;import java.util.concurrent.locks.ReentrantLock;public class Test implements Runnable{public static ReentrantLock lock1 = new ReentrantLock();public static ReentrantLock lock2 = new ReentrantLock();int lock;public Test(int lock)

{this.lock = lock;

}@Override

public void run()

{try

{if (lock == 1)

{

lock1.lockInterruptibly();try

{

Thread.sleep(500);

}catch (Exception e)

{// TODO: handle exception

}

lock2.lockInterruptibly();

}else

{

lock2.lockInterruptibly();try

{

Thread.sleep(500);

}catch (Exception e)

{// TODO: handle exception

}

lock1.lockInterruptibly();

}

}catch (Exception e)

{// TODO: handle exception

}finally

{if (lock1.isHeldByCurrentThread())

{

lock1.unlock();

}if (lock2.isHeldByCurrentThread())

{

lock2.unlock();

}

System.out.println(Thread.currentThread().getId() + ":线程退出");

}

}public static void main(String[] args) throws InterruptedException{

Test t1 = new Test(1);

Test t2 = new Test(2);

Thread thread1 = new Thread(t1);

Thread thread2 = new Thread(t2);

thread1.start();

thread2.start();

Thread.sleep(1000);//DeadlockChecker.check();

}static class DeadlockChecker

{private final static ThreadMXBean mbean = ManagementFactory

.getThreadMXBean();final static Runnable deadlockChecker = new Runnable()

{@Override

public void run()

{// TODO Auto-generated method stub

while (true)

{long[] deadlockedThreadIds = mbean.findDeadlockedThreads();if (deadlockedThreadIds != null)

{

ThreadInfo[] threadInfos = mbean.getThreadInfo(deadlockedThreadIds);for (Thread t : Thread.getAllStackTraces().keySet())

{for (int i = 0; i

{if(t.getId() == threadInfos[i].getThreadId())

{

t.interrupt();

}

}

}

}try

{

Thread.sleep(5000);

}catch (Exception e)

{// TODO: handle exception

}

}

}

};

public static void check()

{

Thread t = new Thread(deadlockChecker);

t.setDaemon(true);

t.start();

}

}

}

上述代码有可能会发生死锁,线程1得到lock1,线程2得到lock2,然后彼此又想获得对方的锁。

我们用jstack查看运行上述代码后的情况

的确发现了一个死锁。

DeadlockChecker.check();方法用来检测死锁,然后把死锁的线程中断。中断后,线程正常退出。

1.1.3.可限时

超时不能获得锁,就返回false,不会永久等待构成死锁

使用lock.tryLock(long timeout, TimeUnit unit)来实现可限时锁,参数为时间和单位。

举个例子来说明下可限时:

package test;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantLock;public class Test implements Runnable{public static ReentrantLock lock = new ReentrantLock();@Override

public void run()

{try

{if (lock.tryLock(5, TimeUnit.SECONDS))

{

Thread.sleep(6000);

}else

{

System.out.println("get lock failed");

}

}catch (Exception e)

{

}finally

{if (lock.isHeldByCurrentThread())

{

lock.unlock();

}

}

}

public static void main(String[] args)

{

Test t = new Test();

Thread t1 = new Thread(t);

Thread t2 = new Thread(t);

t1.start();

t2.start();

}

}

使用两个线程来争夺一把锁,当某个线程获得锁后,sleep6秒,每个线程都只尝试5秒去获得锁。

所以必定有一个线程无法获得锁。无法获得后就直接退出了。

输出:

get lock failed

1.1.4.公平锁

使用方式:

public ReentrantLock(boolean fair) public static ReentrantLock fairLock = new ReentrantLock(true);

一般意义上的锁是不公平的,不一定先来的线程能先得到锁,后来的线程就后得到锁。不公平的锁可能会产生饥饿现象。

公平锁的意思就是,这个锁能保证线程是先来的先得到锁。虽然公平锁不会产生饥饿现象,但是公平锁的性能会比非公平锁差很多。

1.2 Condition

Condition与ReentrantLock的关系就类似于synchronized与Object.wait()/signal()

await()方法会使当前线程等待,同时释放当前锁,当其他线程中使用signal()时或者signalAll()方法时,线 程会重新获得锁并继续执行。或者当线程被中断时,也能跳出等待。这和Object.wait()方法很相似。

awaitUninterruptibly()方法与await()方法基本相同,但是它并不会再等待过程中响应中断。 singal()方法用于唤醒一个在等待中的线程。相对的singalAll()方法会唤醒所有在等待中的线程。这和Obejct.notify()方法很类似。

这里就不再详细介绍了。举个例子来说明:

package test;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.ReentrantLock;public class Test implements Runnable{public static ReentrantLock lock = new ReentrantLock();public static Condition condition = lock.newCondition();

@Overridepublic void run(){try

{lock.lock();

condition.await();

System.out.println("Thread is going on");

}catch (Exception e)

{

e.printStackTrace();

}finally

{lock.unlock();

}

}

public static void main(String[] args) throws InterruptedException{

Test t = new Test();

Thread thread = new Thread(t);

thread.start();

Thread.sleep(2000);

lock.lock();

condition.signal();lock.unlock();

}

}

上述例子很简单,让一个线程await住,让主线程去唤醒它。condition.await()/signal只能在得到锁以后使用。

1.3.Semaphore

对于锁来说,它是互斥的排他的。意思就是,只要我获得了锁,没人能再获得了。

而对于Semaphore来说,它允许多个线程同时进入临界区。可以认为它是一个共享锁,但是共享的额度是有限制的,额度用完了,其他没有拿到额度的线程还是要阻塞在临界区外。当额度为1时,就相等于lock

下面举个例子:

package test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class Test implements Runnable{final Semaphore semaphore = new Semaphore(5);@Override

public void run()

{try

{

semaphore.acquire();

Thread.sleep(2000);

System.out.println(Thread.currentThread().getId() + " done");

}catch (Exception e)

{

e.printStackTrace();

}finally {

semaphore.release();

}

}

public static void main(String[] args) throws InterruptedException{

ExecutorService executorService = Executors.newFixedThreadPool(20);final Test t = new Test();for (int i = 0; i

{

executorService.submit(t);

}

}

}

有一个20个线程的线程池,每个线程都去?Semaphore的许可,Semaphore的许可只有5个,运行后可以看到,5个一批,一批一批地输出。

当然一个线程也可以一次申请多个许可

public void acquire(int permits) throws InterruptedException

1.4 ReadWriteLock

ReadWriteLock是区分功能的锁。读和写是两种不同的功能,读-读不互斥,读-写互斥,写-写互斥。

这样的设计是并发量提高了,又保证了数据安全。

使用方式:

private static ReentrantReadWriteLock readWriteLock=new ReentrantReadWriteLock();

private static Lock readLock = readWriteLock.readLock();

private static Lock writeLock = readWriteLock.writeLock();

详细例子可以查看?Java实现生产者消费者问题与读者写者问题,这里就不展开了。

1.5 CountDownLatch

倒数计时器

一种典型的场景就是火箭发射。在火箭发射前,为了保证万无一失,往往还要进行各项设备、仪器的检查。 只有等所有检查完毕后,引擎才能点火。这种场景就非常适合使用CountDownLatch。它可以使得点火线程

,等待所有检查线程全部完工后,再执行

使用方式:

static final CountDownLatch end = new CountDownLatch(10);

end.countDown();

end.await();

示意图:

一个简单的例子:

package test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Test implements Runnable{static final CountDownLatch countDownLatch = new CountDownLatch(10);static final Test t = new Test();@Override

public void run()

{try

{

Thread.sleep(2000);

System.out.println("complete");

countDownLatch.countDown();

}catch (Exception e)

{

e.printStackTrace();

}

}

public static void main(String[] args) throws InterruptedException{

ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i = 0; i

{

executorService.execute(t);

}

countDownLatch.await();

System.out.println("end");

executorService.shutdown();

}

}

主线程必须等待10个线程全部执行完才会输出"end"。

1.6 CyclicBarrier

和CountDownLatch相似,也是等待某些线程都做完以后再执行。与CountDownLatch区别在于这个计数器可以反复使用。比如,假设我们将计数器设置为10。那么凑齐第一批1 0个线程后,计数器就会归零,然后接着凑齐下一批10个线程

使用方式:

public CyclicBarrier(int parties, Runnable barrierAction) barrierAction就是当计数器一次计数完成后,系统会执行的动作await()

示意图:

下面举个例子:

package test;import java.util.concurrent.CyclicBarrier;public class Test implements Runnable{private String soldier;private final CyclicBarrier cyclic;public Test(String soldier, CyclicBarrier cyclic)

{this.soldier = soldier;this.cyclic = cyclic;

}@Override

public void run()

{try

{//等待所有士兵到齐

cyclic.await();

dowork();//等待所有士兵完成工作

cyclic.await();

}catch (Exception e)

{// TODO Auto-generated catch block

e.printStackTrace();

}

}private void dowork()

{// TODO Auto-generated method stub

try

{

Thread.sleep(3000);

}catch (Exception e)

{// TODO: handle exception

}

System.out.println(soldier + ": done");

}public static class BarrierRun implements Runnable

{boolean flag;int n;public BarrierRun(boolean flag, int n)

{super();this.flag = flag;this.n = n;

}@Override

public void run()

{if (flag)

{

System.out.println(n + "个任务完成");

}else

{

System.out.println(n + "个集合完成");

flag = true;

}

}

}public static void main(String[] args)

{final int n = 10;

Thread[] threads = new Thread[n];boolean flag = false;

CyclicBarrier barrier = new CyclicBarrier(n, new BarrierRun(flag, n));

System.out.println("集合");for (int i = 0; i

{

System.out.println(i + "报道");

threads[i] = new Thread(new Test("士兵" + i, barrier));

threads[i].start();

}

}

}

打印结果:

集合

士兵5: done士兵7: done士兵8: done士兵3: done士兵4: done士兵1: done士兵6: done士兵2: done士兵0: done士兵9: done10个任务完成

1.7 LockSupport

提供线程阻塞原语

和suspend类似

LockSupport.park();

LockSupport.unpark(t1);

与suspend相比?不容易引起线程冻结

LockSupport的思想呢,和?Semaphore有点相似,内部有一个许可,park的时候拿掉这个许可,unpark的时候申请这个许可。所以如果unpark在park之前,是不会发生线程冻结的。

下面的代码是[高并发Java 二] 多线程基础中suspend示例代码,在使用suspend时会发生死锁。

而使用?LockSupport则不会发生死锁。

另外

park()能够响应中断,但不抛出异常。中断响应的结果是,park()函数的返回,可以从Thread.interrupted()得到中断标志。

在JDK当中有大量地方使用到了park,当然LockSupport的实现也是使用unsafe.park()来实现的。

public static void park() { unsafe.park(false, 0L);

}

1.8 ReentrantLock 的实现

下面来介绍下ReentrantLock的实现,ReentrantLock的实现主要由3部分组成:

CAS状态

等待队列

park()

ReentrantLock的父类中会有一个state变量来表示同步的状态

/**

* The synchronization state.

*/

private volatile int state;

通过CAS操作来设置state来获取锁,如果设置成了1,则将锁的持有者给当前线程

final void lock() { if (compareAndSetState(0, 1))

setExclusiveOwnerThread(Thread.currentThread()); else

acquire(1);

}

如果拿锁不成功,则会做一个申请

public final void acquire(int arg) { if (!tryAcquire(arg) &&

acquireQueued(addWaiter(Node.EXCLUSIVE), arg))

selfInterrupt();

}

首先,再去申请下试试看tryAcquire,因为此时可能另一个线程已经释放了锁。

如果还是没有申请到锁,就addWaiter,意思是把自己加到等待队列中去

其间还会有多次尝试去申请锁,如果还是申请不到,就会被挂起

private final boolean parkAndCheckInterrupt() {

LockSupport.park(this); return Thread.interrupted();

}

同理,如果在unlock操作中,就是释放了锁,然后unpark,这里就不具体讲了。

2. 并发容器及典型源码分析

2.1?ConcurrentHashMap?

我们知道HashMap不是一个线程安全的容器,最简单的方式使HashMap变成线程安全就是使用Collections.synchronizedMap,它是对HashMap的一个包装

public static Map m=Collections.synchronizedMap(new HashMap());

同理对于List,Set也提供了相似方法。

但是这种方式只适合于并发量比较小的情况。

我们来看下synchronizedMap的实现

它会将HashMap包装在里面,然后将HashMap的每个操作都加上synchronized。

由于每个方法都是获取同一把锁(mutex),这就意味着,put和remove等操作是互斥的,大大减少了并发量。

下面来看下ConcurrentHashMap是如何实现的

在?ConcurrentHashMap内部有一个Segment段,它将大的HashMap切分成若干个段(小的HashMap),然后让数据在每一段上Hash,这样多个线程在不同段上的Hash操作一定是线程安全的,所以只需要同步同一个段上的线程就可以了,这样实现了锁的分离,大大增加了并发量。

在使用ConcurrentHashMap.size时会比较麻烦,因为它要统计每个段的数据和,在这个时候,要把每一个段都加上锁,然后再做数据统计。这个就是把锁分离后的小小弊端,但是size方法应该是不会被高频率调用的方法。

在实现上,不使用synchronized和lock.lock而是尽量使用trylock,同时在HashMap的实现上,也做了一点优化。这里就不提了。

2.2?BlockingQueue

BlockingQueue不是一个高性能的容器。但是它是一个非常好的共享数据的容器。是典型的生产者和消费者的实现。

鹏仔 微信 15129739599

百科狗 baikegou.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

  • 上一篇:已经是第一篇了
  • 下一篇:已经是最后一篇了
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)