高一历史知识点总结必修一 本文关键词:知识点,高一,必修,历史
高一历史知识点总结必修一 本文简介:高一历史知识点总结必修一必修一第一单元古代中国的政治制度一、分封制目的:巩固国家政权内容:①分封对象——王族、功臣、先代的贵族,②受封者义务——服从周王的命令、镇守疆土、随从作战、交纳贡赋、朝觐述职.③受封者权利——职位世袭、设置官员、建立武装、征派赋役.作用:①加强了周天子对地方的管辖.②扩大了统
高一历史知识点总结必修一 本文内容:
高一历史知识点总结
必修一
必修一
第一单元古代中国的政治制度
一、分封制
目的:巩固国家政权
内容:①分封对象——王族、功臣、先代的贵族,②受封者义务——服从周王的命令、镇守疆土、随从作战、交纳贡赋、朝觐述职.③受封者权利——职位世袭、设置官员、建立武装、征派赋役.
作用:①加强了周天子对地方的管辖.②扩大了统治区域,开发了边远地区;③形成对周王室众星捧月一般的政治格局;④周成为一个延续数百年的强国.但诸侯国有相当大的独立性,埋下分裂割据的隐患.
二、宗法制
定义:宗法制是依据父系血缘关系的亲疏来维系政治等级、巩固统治的一种社会制度.
特点:嫡长子继承制
宗法制与分封制的关系:分封制和宗法制是西周政治制度的两大支柱,互为表里.
影响:宗法制保证了贵族在政治上的垄断和特权地位,也有利于统治集团内部的稳定和团结.
中国早期政治制度特点:以宗法制为核心,带有浓厚的部族色彩.
三、秦的统一:
公元前221年,秦灭六国,秦王嬴政建立了中国历史上第一个统一的、封建专制主义中央集权的国家——秦朝.
四、秦朝专制主义中央集权政治制度的形成
内容:①建立“皇帝”称号,确立皇帝制度.全国的政治、经济、军事大权由皇帝总揽,从中央到地方的主要官吏由皇帝任免.
②设置三公九卿中央官制:丞相——帮助皇帝处理全国政事;御史大夫——监察百官;太尉——负责全国军务.
③在地方推行郡县制:郡的长官是郡守,县的长官称县令或县长,均由皇帝直接任免.
影响:巩固了国家的统一,促进了社会的安定和经济文化的发展,奠定了中国两千多年政治制度的基本格局,对中华民族的形成起了重要的作用.
消极作用:加强对人民的压榨,容易导致暴政,造成阶级矛盾的激化.
五、秦朝巩固统一的措施:
①颁布秦律、统一法令;②统一货币、度量衡;③统一文字;④修建驰道、灵渠;⑤修筑万里长城;组织移民.
秦朝灭亡的原因是秦的暴政
六、汉武帝加强中央集权
背景:汉初郡国并行,出现王国问题
措施:汉景帝平定“七国之乱”;汉武帝实行推恩令
作用:解决了王国问题,加强中央集权,巩固和发展了大一统局面.
唐末至五代出现了藩镇割据局面
七、宋初中央集权的强化
措施:①军事上:杯酒释兵权,解除朝中大将和地方节度使的兵权;加强禁军、强干弱枝.②行政上:派文臣任地方长官;设通判负责监督.③经济上:地方赋税一小部分作为地方开支,其余全部由中央掌控.
影响:①加强了中央对地方的控制,消除了藩镇割据现象.②造成冗官、冗兵、冗费,埋下了“积贫积弱”的祸根.
八、唐实行三省六部制
唐朝中央设中书省、门下省和尚书省,分别负责决策、审议和执行.三省的长官都是宰相,分散了相权.尚书省下设吏、户、礼、兵、刑、工六部,确立并完善了三省六部的管理体制.
九、元朝实行行省制度
背景:疆域空前扩大
概况:中央设中书省;地方设十个行省和宣政院辖区
意义:加强了对全国的管辖;加强了中央集权,巩固了统一.是中国行省制的开端,对后世影响深远.
十、选官、用官制度的变化
朝代制度
汉代察举制
魏晋南北朝九品中正制
隋唐宋—清朝科举制
十一、明清君主专制的加强
明太祖调整中央和地方官制,加强中央集权:①废丞相,设六部;废行省,设三司.②内阁的创立.实质:是君主专制强化的产物.
清朝雍正帝设军机处(上传下达)——君主专制制度发展到顶峰
第二单元古代希腊罗马政治制度
一、希腊的政治制度
古希腊民主政治产生的原因:①独特的地理环境与小国寡民的国情;②海外贸易和工商业的发达.
城邦的基本特征是:小国寡民和独立自主
雅典民主政治的确立历程:梭伦改革——为雅典民主政治奠定基础;克利斯提尼改革——确立雅典民主政治;伯利克里改革——把雅典民主政治推向顶峰.
雅典民主政治的特点:人民主权、轮番而治.
雅典民主政治的评价:
积极方面:①实行民主政治,社会相对公正一些,有利于社会安定.②促成了雅典政治、经济和文化的高度繁盛.③为后来欧美资产阶级建立民主政治提供了一定的借鉴.
消极方面:①妇女、奴隶和外邦移民没有政治权力,真正能够享受到民主的只是少数人,实质是奴隶主阶级的民主.②过于泛滥的民主,容易导致无政府主义的泛滥.
二、罗马法
1、罗马法的起源和发展历程:
早期的罗马国家只有习惯法,没有成文法.成文法诞生标志是《十二铜表法》的颁布.
公民法:适用范围仅限于罗马公民,用来调整罗马公民之间的关系的罗马法律,被称为公民法
万民法:在古罗马对外扩张的过程中,逐渐形成普遍适用于罗马统治范围内一切自由民的法律,即“万民法”
6世纪,《民法大全》标志罗马法体系的最终完成.
2、罗马法的评价
积极方面:①罗马法的制定和实施维系了帝国的统治,稳定了社会秩序.②罗马法是欧洲历史上第一部比较系统完备的法典,极大影响了近代欧美资本主义国家的立法司法制度;是近代资产阶级反封建的有力武器.
局限性:维护奴隶制度.
第三单元近代西方资本主义政治制度的确立与发展
一、英国革命
背景:根本原因:斯图亚特王朝实行专制统治阻碍了英国资本主义经济的发展
过程:1640年英国爆发革命.期间,处死了国王查理一世,成立共和国.但斯图亚特王朝复辟.1688年光荣革命,标志英国革命的完成.
二、英国的君主立宪制:
特点:①保留国王,实际上“统而不治”的地位,作为国家的象征而存在.②国家的最高权力在议会,实行代议制.议会是国家最高立法机关,内阁掌握行政权并对议会负责.
1689年《权利法案》的颁布是正式确立的标志.18世纪责任制内阁逐步形成.
三、美国政府的建立:
1776年,英属北美13个殖民地独立,美国诞生.独立之初的美国实际上是13个州的松散联盟(即邦联).1789年联邦政府成立,华盛顿当选为美国第一任总统.19世纪中期,美国形成民主党、共和党轮流执政的格局
四、美国1787年宪法:
1787年在费城召开制宪会议通过了一部联邦宪法.
评价:①是世界上第一部较完整的资产阶级宪法.②加强了国家权力,实践了三权分立原则,体现资产阶级民主精神.局限性:承认黑人奴隶制,印第安人没有公民权,妇女地位低下.
五、艰难的法兰西共和之路:
1789年法国大革命和第一共和国的建立;1870年第三共和国的确立.
六、法兰西第三共和国宪法:
1875年初,国民议会通过了法兰西第三共和国宪法.
意义:从法律上正式确立了共和政体(议会制共和国),标志着法兰西共和政体的最终确立
七、德意志的统一:
俾斯麦领导下,普鲁士通过三次王朝战争,完成了德国统一.1871年,建立了统一的德意志帝国.
八、德意志的二元制君主立宪制:
特点:皇帝不是虚位,而是握有实权.皇帝和首相掌握国家的大权.议会对政府没有监督权
第四单元近代中国反侵略、求民主的潮流
一、两次鸦片战争
鸦片走私与虎门销烟:英国为了扭转对华贸易逆差,向中国走私鸦片.林则徐领导禁烟运动,1839年6月,虎门销烟.
鸦片战争爆发的根本原因:英国资本主义发展的需要,要求扩大海外市场和大量掠夺原料
两次鸦片战争的起止年代:1840-1842年,1856年—1860年
中国近代史上第一个不平等条约《南京条约》的签订时间及其内容:1842年.《南京条约》内容:割香港岛给英国;赔款2100万元;开放广州、厦门、福州、宁波、上海为通商口岸;协定关税.
鸦片战争使中国开始沦为半殖民地半封建社会.
1860年英法联军洗劫和焚毁圆明园
1858年《天津条约》规定了外国公使进驻北京、增开十口通商、外国军舰商船可以在长江各口岸自由航行等
1860年《北京条约》规定了增开天津为商埠、割九龙司等
沙俄侵占我国北方150多万平方公里领土
英国侵占我国领土香港地区(条约及地图)经过:1842年,中英《南京条约》割占香港岛;1860年中英《北京条约》割占九龙司地方一区;1898年强行租借新界.
二、太平天国运动
1851年洪秀全发动金田起义,永安建制初步建立政权,1853年太平天国定都天京,正式建立与清廷对峙的政权.通过北伐、西征,1856年太平天国在军事上达到全盛时期.
1856年发生天京内讧.1864年曾国藩指挥湘军攻陷天京,太平天国运动失败.
洪仁
篇2:高中英语必修五笔记文章知识点
高中英语必修五笔记文章知识点 本文关键词:知识点,五笔,必修,高中英语,文章
高中英语必修五笔记文章知识点 本文简介:高中英语必修五笔记文章知识点Unit1whatdoyouknowaboutgreatscientists?highexpectationsarethekeytoeverything远大的理想是开启万物的钥匙facethemusic面对命运对你的不公平beabsorbedin全神贯注于,专心致志于be
高中英语必修五笔记文章知识点 本文内容:
高中英语必修五笔记文章知识点
Unit
1
what
do
you
know
about
great
scientists?
high
expectations
are
the
key
to
everything
远大的理想是开启万物的钥匙
face
the
music
面对命运对你的不公平
be
absorbed
in全神贯注于,专心致志于
be
lost
in
thought想得出神
沉思于…
be
engaged
in
从事于…忙于
be
concentrated
on
集中注意力…
一…就…
The
moment…瞬间
instant
立刻
the
minute
second
片刻
make
a
suggestion
give
an
advice
make
the
investigation
look
into
调查
看
浏览
slow
down
减缓
relate
to
有关
涉及
two
athe
deaths
另外两个死者
link
to
有关联系
die
out
灭绝
die
of
死于
die
from死于
his
career
came
to
an
end
他的事业结束了
develop
a
severe
illness
染上很严重的疾病
make
a
new
career
创立新的事业
apart
from
除了…
two
more
example
=another
two另外两个
make
a
face
做鬼脸
make
one’s
way
to
转向
向…出发,朝…走去
make
up
one’s
mind下定决心
make
friends
make
the
bed
make
sure确定
make
room
for为腾空间
lead
to
领导
only
修饰主语不倒装
状语要倒装
If
only
但愿
要是
Only
if只有
要到装
Eg.:
only
if
you
use
this
way,can
you
…
make
sense
有意义
讲得通
in
a
sense
有点
make
sense
of
搞清楚
弄明白
in
no
sense
绝不
;不可能
22.
at
times
时不时
有时
At
a
time
每一次
From
time
to
time
时而不时的
At
one
time
曾经一度
For
the
time
being
暂时
Ahead
of
time
提前
All
the
time
一直
At
all
times总是
随时
At
any
time
无论何时
At
no
time
决不
Out
of
time
不合时宜的
23.suspect
sb
of
do
sth怀疑某人做某事
24.look
into
调查
25.look
ahead
向前看
展望未来
26.look
around
for
参观
四处看看
27.
look
away
from
把目光…从移开
28.look
back
(at)
回顾
回忆
29.look
out
(for)
留心
当心
30.look
up
to
尊敬
钦佩
31.look
though
检查
浏览
32.go
down
下降
33.slow
down
慢下来
放慢速度
33.knock
down
击倒
34.tear
down
拆毁
拆除
Unit
2
keep
your
eyes
open
睁大你的眼睛
consist
of由…组成
leave
out省去
不考虑
遗漏
divide
into
分成
compare
A
with
B
与…比
compare
A
to
B
把A比作B
prepare
to
准备
work
out
做出
解决
设计出
计算出
锻炼开采完
发展
进行
work
on对起作用;企图影响或说服,忙于
work
in
在…工作
work
off
渐渐消除
处理
排除
卖掉
发泄
asked
the
boss
on
the
phone
通过电话
a
furnished
house
with
all
modern
conveniences
一个带家具的房子有所有的现代方便的设施
familiar
with熟悉
worried
about
the
time
available担心时间不够
make
a
list
of
列出关于…的清单
on
special
occasions
在特殊的场合
the
four-hundred-year-old
uniform
有四百年历史的制服
定语
不加“s”
set
the
world
time设置世界时间
on
either
side
of
the
line
在线的两端
fall
asleep入睡
with
delight
十分喜悦的
Unit
3
suffer+pain
/lost
遭受疼痛
suffer
from
+illness
remind
sb
to
do
sth提醒某人做某事
as
a
result单独放句首应道原因状语
as
a
result
of
=n./n(短语)
feel
unsettled
感到不安
unsettled
problem为解决的问题
unsettled
weather
易变化的天气
just
as
正当
make
the
necessary
adjustment
to
做必要的调整(to
介词)
be
back
on
one’s
feet
恢复
a
small
room
nearby
for
a
rest
在一个附近的小房子里休息
Nearby
做后置定语
In
the
neighborhood
在附近
press
down
向下按压
fasten
the
safety
belt
系上安全带
lost
sight
of
看不见
在视野之外
at
first
sight
初次看到
乍一看
in
all
directions
=in
every
direction
四面八方
sweep
up
席卷
show
sb
into
带某人进入
be
made
of
由什么制成
be
made
into
制成
be
made
from由所制成的
用于原材料不易看出的场合
provide
with
提供
flash
a
switch
按下按钮
switch…around
转变
改变
on
the
timetable
在时刻表上
as
if
by
magic
好像变魔术一样
slide
into
滑进
run
into
偶遇
撞上
overcome
the
difficulties
克服困难
bend
one’s
mind/effort/thought
to
集中做
bend
the
rules
放宽规则
通融
be
astonished
at对感到惊讶
connect
to
联系
a
long
passage
一个长长的通道
a
desert
island
一个荒凉的小岛
force
to
do
强迫
perform
task实施任务
my
mind
began
to
wander
我的思维开始遐想
be
greedy
for对…渴望
贪婪
in
five
days将来
five
days
late
之前
Unit
4
be
to
strongly
influence
his
life
as
a
journalist
an
assistant
to
an
experienced
journalist
一个有经验的记者的助手
go
out
on
a
article
外出采访
submit
the
article
提交文章
take
with戴上
be
eager
to
do
期待做
update
my
skill更新我的技能
take
an
amateur
course
参加业余课程
acquire
all
the
information获得所有的信息
have
a
good
“nose”
for
a
story
tell
the
whole
truth
讲诉所有的事实
inform
sb
of
sth
通知某人某事
keep
in
mind
记住
make
sure
确定
depend
on
取决于…
a
trick
of
the
trade职业诀窍
accuse
of
控告
score
goal得分进球
so
as
to
为了
deny
doing
拒绝
It’s
a
dilemma
because
the
footballer
could
have
demanded
damages虚拟语气
要求赔偿
be
proved
right
被证明是对的
look
forward
to
期待
as
the
old
saying
goes
就像我们所说的一样
ahead
of
前面
set
to
work
开始工作
get
down
to开始认真去做
着手去做
pass
sth
to
sb
把某物传给某人
check
the
evidence
核对证据
a
good
front
page
article
头版头条
get
the
fact
straight
直接得出事实
Unit
5
a
temporary
form
of
help暂时的帮助
fall
ill
生病
fall
asleep
入睡
fall
behind
落后于…
fall
out
解散
fall
into
掉入
养成(坏习惯)
fall
silent
=fall
into
silence陷入沉寂
get
injured
受伤
If
possible
如果可能
happen
to
发生
first
aid
急救
an
essential
part
of
一个不可缺少的部分
act
as
a
barrier
against
disease
扮演一个低于疾病的屏障
act
as
担当其重要作
prevent
from
阻止
keep
from
不让
避免
stop
from
阻止
protect
from
保护
维护
save
from
拯救
挽救
get
burned烧伤
in
the
treatment
of
burns在治疗的过程中
a
variety
of
各种许多
within
a
day
or
two在一两天之内
mildly
swollen
轻微肿胀
mildly
painful
轻微疼痛
turn
white
when
pressed当压的时候变白
watery
surface
似水的表面
extremely
painful
极度的疼痛
nerves
are
damaged
神经受损
take
off
脱掉
起飞
事业成功
over
and
over
again
一次又一次
all
over
again
再次
重新
again
and
again
反复的
再三
time
and
again
多次
一再的
now
and
again
不时的
间或
once
again
再次
squeeze
out
榨出
break
the
blisters
弄破水泡
iron
clothes
熨衣服
pick
off摘下
脱掉
采摘
caught
fire
着火
be
doing…when
正在做突然
be
about
to
do…when
即将做…突然
be
on
the
point
of
doing…when
正要去做.突然
has/have/had
done…when
刚刚…突然
at
the
Lifesaver
Awards
在救生员大会上
a
shocking
knife
attack震惊的刀伤
at
a
ceremony
在颁奖大会上
put
one’s
hands
on
找到
the
injuries
to
the
hands
手上的伤口
apply
pressure
to
the
wounds
按住伤口
make
a
difference
有影响
perform
first
aid
on
sb
对某人实施急救
in
place
放对位置
适当的
electric
shock
触电
电休克
icy
water
冰水
leave
out
省略
忽略
遗漏
sit
up端坐
晚睡
熬夜
坐正
be
fit
for
适合
胜任
stab
in/into
刺入
constantly
interrupted
by
applause
不断地被掌声打断
It
is
said
that…=be
said
to
do…据说…
the
population
/information/advice
/price
of
insist
on
坚持
强调
强烈要求
hold
in
place固定就位
put
back放回原处
回拨,向后退
篇3:Java多线程、并发编程知识点总结
Java多线程、并发编程知识点总结 本文关键词:知识点,并发,多线程,编程,Java
Java多线程、并发编程知识点总结 本文简介:1、线程的状态1.1创建线程的两种方式,接口和线程类。利用接口的好处:更好的体现面向对象的思想,可以避免由于Java的单继承特性而带来的局限;增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;(同步问题)适合多个相同程序代码的线程区处理同一资源的情况。(关注微信订阅号:javaedu)1
Java多线程、并发编程知识点总结 本文内容:
1、线程的状态
1.1创建
线程
的两种方式,接口和线程类。利用接口的好处:更好的体现面向对象的思想,可以避免由于Java的单继承特性而带来的局限;
增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;(同步问题)适合多个相同程序代码的线程区处理同一资源的情况。(关注微信订阅号:javaedu)
1.2线程就绪等待调度运行start()方法。
1.3线程的中断
这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。
1.4、线程挂起和恢复(挂起还拥有对象锁,死锁)
线程的挂起和恢复实现的正确方法是:通过设置标志位,让线程在安全的位置挂起
1.5
利用多线程模拟同步运行用jion方法,mThread.jion()表示该线程运行完毕后,在运行调用它的线程。
1.6
sleep
休眠
当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之后,或者阻塞被另一个线程打断;
1.7stop线程停止
stop方法突然终止线程(持有这些锁必定有某种合适的理由——也许是阻止其他线程访问尚未处于一致性状态的数据,
突然释放锁可能使某些对象中的数据处于不一致状态)
1.8线程可以阻塞于四种状态:(参考资料:t.cn/RA5iKhq)
当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之后,或者阻塞被另一个线程打断;
当线程碰到一条wait()语句时,它会一直阻塞到接到通知(notify())、被中断或经过了指定毫秒时间为止(若制定了超时值的话)
线程阻塞与不同I/O的方式有多种。常见的一种方式是InputStream的read()方法,该方法一直阻塞到从流中读取一个字节的数据为止,它可以无限阻塞,因此不能指定超时时间
线程也可以阻塞等待获取某个对象锁的排他性访问权限(即等待获得synchronized语句必须的锁时阻塞)。
2、线程的种类
守护线程与线程阻塞的四种情况
Java中有两类线程:User
Thread(用户线程)、Daemon
Thread(守护线程)
用户可以用Thread的setDaemon(true)方法设置当前线程为守护线程。
守护线程是否已经完成了预期的服务任务。一旦所有的用户线程退出了,虚拟机也就退出运行了。
因此,不要在守护线程中执行业务逻辑操作(比如对数据的读写等)。、
setDaemon(true)必须在调用线程的start()方法之前设置,否则会跑出IllegalThreadStateException异常。
在守护线程中产生的新线程也是守护线程。
不要认为所有的应用都可以分配给守护线程来进行服务,比如读写操作或者计算逻辑。
3、线程所操作的数据
同步问题:
4、可重入内置锁
每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。
线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。
获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。
某一个持有同步对象锁的线程可以多次进入这个同步代码块或方法。即同步对象锁可以重入!
同一个线程在调用本类中其他synchronized方法/块或父类中的synchronized方法/块时,都不会阻碍该线程地执行,因为互斥锁时可重入的。
6、Java内存模型
在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。(本地内存+共享主存)
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。
这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
而volatile关键字就是提示JVM:对于这个成员变量,不能保存它的私有拷贝,而应直接与共享成员变量交互。
volatile型变量的特殊规则:
1、保证此变量对所有线程的可见性。需要注意,volatile变量的写操作除了对它本身的读操作可见外,volatile写操作之前的所有共享变量均对volatile读操作之后的操作可见
2、禁止指令重排序优化
final域能确保初始化过程的安全性,从而可以不受限制地访问不可变对象,并在共享这些对象时无须同步
因此在编码时,不需要将long和double变量专门声明为volatile。
主内存与工作内存
Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,
线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。
根据Java虚拟机规范的规定,volatile变量依然有共享内存的拷贝,但是由于它特殊的操作顺序性规定——从工作内存中读写数据前,
必须先将主内存中的数据同步到工作内存中,所有看起来如同直接在主内存中读写访问一般,因此这里的描述对于volatile也不例外
不允许一个线程丢弃它的最近的assign操作,即变量在工作内存中改变了之后必须把该变化同步回主内存。
如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前,需要重新执行load或assign操作初始化变量的值。
对一个变量执行unlock操作之前,必须先把此变量同步回主内存(
7、轻量级同步
volatile是一种稍弱的同步机制,在访问volatile变量时不会执行加锁操作,也就不会执行线程阻塞,因此volatilei变量是一种比synchronized关键字更轻量级的同步机制。
使用建议:在两个或者更多的线程需要访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,没必要使用volatile。
由于使用volatile屏蔽掉了JVM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
假如有两个线程分别读写volatile变量时,线程A写入了某volatile变量,线程B在读取该volatile变量时,便能看到线程A对该volatile变量的写入操作,
关键在这里,它不仅会看到对该volatile变量的写入操作,A线程在写volatile变量之前所有可见的共享变量,在B线程读同一个volatile变量后,都将立即变得对B线程可见。
happen—before规则介绍
其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,“影响”包括修改了内存中共享变量的值、发送了消息、调用了方法等,它与时间上的先后发生基本没有太大关系。
线程启动规则:Thread对象的start()方法happen—before此线程的每一个动作。
8、同步锁说明
当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,
这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只能分配给一个线程,因此叫做互斥锁。
如果同一个方法内同时有两个或更多线程,则每个线程有自己的局部变量拷贝。
类的每个实例都有自己的对象级别锁
访问同一个类的不同实例对象中的同步代码块,不存在阻塞等待获取对象锁的问题,
因为它们获取的是各自实例的对象级别锁,相互之间没有影响。
持有一个对象级别锁不会阻止该线程被交换出来,也不会阻塞其他线程访问同一示例对象中的非synchronized代码。
持有对象级别锁的线程会让其他线程阻塞在所有的synchronized代码外。
使用synchronized(obj)同步语句块,可以获取指定对象上的对象级别锁。
类级别锁被特定类的所有示例共享,它用于控制对static成员变量以及static方法的并发访问。具体用法与对象级别锁相似。
10、多线程环境中安全使用集合API
最初设计的Vector和Hashtable是多线程安全的。
在Collections类
中有多个静态方法,它们可以获取通过同步方法封装非同步集合而得到的集合:
public
static
List
synchronizedList(list
l)
List
list
=
Collection.synchronizedList(new
ArrayList());
注意,ArrayList实例马上封装起来,不存在对未同步化ArrayList的直接引用(即直接封装匿名实例)。
这是一种最安全的途径。如果另一个线程要直接引用ArrayList实例,它可以执行非同步修改。
从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。
、volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。
原因是声明为volatile的简单变量如果当前值与该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:“count++”、“count
=
count+1”。
当且仅当满足以下所有条件时,才应该使用volatile变量:
1、对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。
2、该变量没有包含在具有其他变量的不变式中。
三、死锁问题
遵循以下原则有助于规避死锁:
1、只在必要的最短时间内持有锁,考虑使用同步语句块代替整个同步方法;
2、尽量编写不在同一时刻需要持有多个锁的代码,如果不可避免,则确保线程持有第二个锁的时间尽量短暂;
3、创建和使用一个大锁来代替若干小锁,并把这个锁用于互斥,而不是用作单个对象的对象级别锁;
四、线程通信
在调用wait()之前,线程必须要获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方法。进入wait()方法后,当前线程释放锁。
notify()
该方法也要在同步方法或同步块中调用,即在调用前,线程也必须要获得该对象的对象级别锁,的如果调用notify()时没有持有适当的锁,也会抛出IllegalMonitorStateException。
notify后,当前线程不会马上释放该对象锁,wait所在的线程并不能马上获取该对象锁,要等到程序退出synchronized代码块后,当前线程才会释放锁,wait所在的线程也才可以获取该对象锁),
但不惊动其他同样在等待被该对象notify的线程们。当第一个获得了该对象锁的wait线程运行完毕以后,它会释放掉该对象锁,此时如果该对象没有再次使用notify语句,则即便该对象已经空闲,
其他wait状态等待的线程由于没有得到该对象的通知,会继续阻塞在wait状态,直到这个对象发出一个notify或notifyAll。这里需要注意:它们等待的是被notify或notifyAll,而不是锁。
这与下面的notifyAll()方法执行后的情况不同。
notifyAll使所有原来在该对象上wait的线程统统退出wait的状态(即全部被唤醒,不再等待notify或notifyAll,但由于此时还没有获取到该对象锁,因此还不能继续往下执行),
变成等待获取该对象上的锁,一旦该对象锁被释放(notifyAll线程退出调用了notifyAll的synchronized代码块的时候),他们就会去竞争。
如果其中一个线程获得了该对象锁,它就会继续往下执行,在它退出synchronized代码块,释放锁后,其他的已经被唤醒的线程将会继续竞争获取该锁,一直进行下去,直到所有被唤醒的线程都执行完毕。
如果线程调用了对象的wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。
当有线程调用了对象的notifyAll()方法(唤醒所有wait线程)或notify()方法(只随机唤醒一个wait线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。
优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用wait()方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,
直到执行完了synchronized代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。
总结:在使用线程的等待/通知机制时,一般都要配合一个boolean变量值(或者其他能够判断真假的条件),在notify之前改变该boolean变量的值,让wait返回后能够退出while循环
(一般都要在wait方法外围加一层while循环,以防止早期通知),或在通知被遗漏后,不会被阻塞在wait方法处。这样便保证了程序的正确性。
五、并发新特性
1、
一般来说,CachedTheadPool在程序执行过程中通常会创建与所需数量相同的线程,然后在它回收旧线程时停止创建新线程,
因此它是合理的Executor的首选,只有当这种方式会引发问题时(比如需要大量长时间面向连接的线程时),才需要考虑用FixedThreadPool。
服务端面向连接:public
static
ExecutorService
newFixedThreadPool(int
nThreads)
Executor执行Runnable任务
Executor执行Callable任务
在Java
5之后,任务分两类:一类是实现了Runnable接口的类,一类是实现了Callable接口的类。两者都可以被ExecutorService执行,
但是Runnable任务没有返回值,而Callable任务有返回值。并且Callable的call()方法只能通过ExecutorService的submit(Callable
task)
方法来执行,
并且返回一个
Future,是表示任务等待完成的
Future。
Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是
Runnable
不会返回结果,并且无法抛出经过检查的异常而Callable又返回结果,
而且当获取返回结果时可能会抛出异常。Callable中的call()方法类似Runnable的run()方法,区别同样是有返回值,后者没有。
当将一个Callable的对象传递给ExecutorService的submit方法,则该call方法自动在一个线程上执行,并且会返回执行结果Future对象。同样,将Runnable的对象传递给ExecutorService的submit方法,
则该run方法自动在一个线程上执行,并且会返回执行结果Future对象,但是在该Future对象上调用get方法,将返回null。
2、自定义线程池
ThreadPoolExecutor类创建,它有多个构造方法来创建线程池
BlockingQueue