SlideShare a Scribd company logo
1 of 40
Download to read offline
‫ﺍﻟﻔﺼﻞ‬
30
‫ﺗﻌﺪﺩ‬
‫ﻭ‬
‫ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻮﺍﺯﻳﺔ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
1
‫ﻣﺘﺮﺟﻢ‬
‫ﻣﻦ‬
‫ﺍﻵﻳﺴﻠﻨﺪﻳﺔ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﻌﺮﺑﻴﺔ‬
-
www.onlinedoctranslator.com
‫ﺃﻫﺪﺍﻑ‬
-
-
-
-
-
‫ﻟﻠﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻧﻈﺮﺓ‬
‫ﻋﺎﻣﺔ‬
‫ﺣﻮﻝ‬
‫ﺗﻌﺪﺩ‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
§)
30.2
(
.
‫ﻟﺘﻄﻮﻳﺮ‬
‫ﻓﺉﺎﺕ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻣﻦ‬
‫ﺧﻼﻝ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﻗﺎﺑﻞ‬
‫ﻟﻠﺘﺸﻐﻴﻞ‬
‫ﻭﺍﺟﻬﺔ‬
§)
30.3
(
.
‫ﻹﻧﺸﺎء‬
‫ﺳﻼﺳﻞ‬
‫ﺭﺳﺎﺉﻞ‬
‫ﻟﺘﺸﻐﻴﻞ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﻣﻠﻒ‬
‫ﺧﻴﻂ‬
‫ﻓﺉﺔ‬
§)
30.3
(
.
‫ﻟﻠﺘﺤﻜﻢ‬
‫ﻓﻲ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﻄﺮﻕ‬
‫ﺍﻟﻤﻮﺟﻮﺩﺓ‬
‫ﻓﻲ‬
‫ﻣﻠﻒ‬
‫ﺧﻴﻂ‬
‫ﻓﺉﺔ‬
§)
30.4
(
.
‫ﻟﻠﺘﺤﻜﻢ‬
‫ﻓﻲ‬
‫ﺍﻟﺮﺳﻮﻡ‬
‫ﺍﻟﻤﺘﺤﺮﻛﺔ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻭﺍﻻﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﻨﻈﺎﻡ‬
.‫ﺍﻷﺳﺎﺳﻲ‬
‫ﺗﺸﻐﻴﻞ‬
ً‫ﺎ‬‫ﻻﺣﻘ‬
‫ﻟﺘﺸﻐﻴﻞ‬
‫ﺍﻟﻜﻮﺩ‬
‫ﻓﻲ‬
‫ﻣﻮﺿﻮﻉ‬
‫ﺍﻟﺘﻄﺒﻴﻖ‬
§)
30.5
(
.
-
-
‫ﻟﺘﻨﻔﻴﺬ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻓﻲ‬
‫ﺗﺠﻤﻊ‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
§)
30.6
(
.
‫ﻻﺳﺘﺨﺪﺍﻡ‬
‫ﻃﺮﻕ‬
‫ﺃﻭ‬
‫ﻛﺘﻞ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
‫ﻟﻤﺰﺍﻣﻨﺔ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻟﺘﺠﻨﺐ‬
‫ﻇﺮﻭﻑ‬
‫ﺍﻟﺴﺒﺎﻕ‬
§)
30.7
(
.
-
-
-
-
-
‫ﻟﻤﺰﺍﻣﻨﺔ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻷﻗﻔﺎﻝ‬
§)
30.8
(
.
‫ﻟﺘﺴﻬﻴﻞ‬
‫ﺍﺗﺼﺎﻻﺕ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﺸﺮﻭﻁ‬
‫ﻋﻠﻰ‬
‫ﺍﻷﻗﻔﺎﻝ‬
§§)
30.10-30.9
(
.
‫ﻟﺘﻘﻴﻴﺪ‬
‫ﻋﺪﺩ‬
‫ﻣﺮﺍﺕ‬
‫ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰ‬
‫ﻣﻮﺭﺩ‬
‫ﻣﺸﺘﺮﻙ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻹﺷﺎﺭﺍﺕ‬
§)
30.12
(
.
‫ﻻﺳﺘﺨﺪﺍﻡ‬
‫ﺃﺳﻠﻮﺏ‬
‫ﻃﻠﺐ‬
‫ﺍﻟﻤﻮﺍﺭﺩ‬
‫ﻟﺘﺠﻨﺐ‬
‫ﺍﻟﻤﺂﺯﻕ‬
§)
30.13
(
.
‫ﻟﻮﺻﻒ‬
‫ﺩﻭﺭﺓ‬
‫ﺣﻴﺎﺓ‬
‫ﺍﻟﺨﻴﻂ‬
§)
30.14
(
.
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
2
‫ﻣﻔﺎﻫﻴﻢ‬
‫ﺍﻟﺨﻴﻂ‬
-
‫ﻗﺪ‬
‫ﻳﺘﻜﻮﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻣﻦ‬
‫ﺍﻟﻌﺪﻳﺪ‬
‫ﻣﻦ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﺍﻟﺘﻲ‬
‫ﻳﻤﻜﻦ‬
‫ﺗﺸﻐﻴﻠﻬﺎ‬
‫ﻓﻲ‬
‫ﻭﻗﺖ‬
.‫ﻭﺍﺣﺪ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻫﻮ‬
‫ﺗﺪﻓﻖ‬
‫ﺗﻨﻔﻴﺬ‬
، ‫ﺍﻟﻤﻬﻤﺔ‬
‫ﻣﻦ‬
‫ﺍﻟﺒﺪﺍﻳﺔ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﻨﻬﺎﻳﺔ‬
-
‫ﺃ‬
‫ﻣﺴﻠﻚ‬
‫ﻳﻮﻓﺮ‬
‫ﺁﻟﻴﺔ‬
‫ﻟﺘﺸﻐﻴﻞ‬
.‫ﻣﻬﻤﺔ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
Java
،
‫ﻳﻤﻜﻨﻚ‬
‫ﺗﺸﻐﻴﻞ‬
‫ﺳﻼﺳﻞ‬
‫ﺭﺳﺎﺉﻞ‬
‫ﻣﺘﻌﺪﺩﺓ‬
‫ﻣﻦ‬
‫ﺑﺮﻧﺎﻣﺞ‬
‫ﻭﺍﺣﺪ‬
‫ﻓﻲ‬
‫ﻧﻔﺲ‬
.‫ﺍﻟﻮﻗﺖ‬
-
‫ﻳﻤﻜﻦ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﻫﺬﻩ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻓﻲ‬
‫ﻭﻗﺖ‬
‫ﻭﺍﺣﺪ‬
‫ﻓﻲ‬
‫ﺃﻧﻈﻤﺔ‬
‫ﻣﺘﻌﺪﺩﺓ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
3
‫ﻣﻔﻬﻮﻡ‬
‫ﺍﻟﺨﻴﻮﻁ‬
)
‫ﺗﺎﺑﻊ‬
(
‫ﻣﻀﺎﻋﻒ‬
‫ﺍﻟﻤﻮﺍﺿﻴﻊ‬
‫ﻋﻠﻰ‬
‫ﻣﻀﺎﻋﻒ‬
‫ﻭﺣﺪﺍﺕ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺔ‬
‫ﺍﻟﻤﺮﻛﺰﻳﺔ‬
‫ﻣﻀﺎﻋﻒ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﺗﻘﺎﺳﻢ‬
‫ﺃ‬
‫ﻭﺣﺪﺓ‬
‫ﻣﻌﺎﻟﺠﺔ‬
‫ﻣﺮﻛﺰﻳﺔ‬
‫ﻭﺍﺣﺪﺓ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
4
‫ﻣﻔﻬﻮﻡ‬
‫ﺍﻟﺨﻴﻮﻁ‬
)
‫ﺗﺎﺑﻊ‬
(
-
‫ﻓﻲ‬
‫ﺃﻧﻈﻤﺔ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‬
، ‫ﺍﻟﻔﺮﺩﻱ‬
‫ﺗﺸﺘﺮﻙ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﺍﻟﻤﺘﻌﺪﺩﺓ‬
‫ﻓﻲ‬
‫ﻭﻗﺖ‬
‫ﻭﺣﺪﺓ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺔ‬
، ‫ﺍﻟﻤﺮﻛﺰﻳﺔ‬
‫ﻭﺍﻟﻤﻌﺮﻭﻑ‬
‫ﺑﺎﺳﻢ‬
‫ﻭﻗﺖ‬
‫ﺍﻟﻤﺸﺎﺭﻛﺔ‬
،
‫ﻭﻧﻈﺎﻡ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﻣﺴﺆﻭﻝ‬
‫ﻋﻦ‬
‫ﺟﺪﻭﻟﺔ‬
‫ﺍﻟﻤﻮﺍﺭﺩ‬
‫ﻭﺗﺨﺼﻴﺼﻬﺎ‬
‫ﻟﻬﻢ‬
-
‫ﻳﻤﻜﻦ‬
‫ﺃﻥ‬
‫ﻳﺠﻌﻞ‬
‫ﺗﻌﺪﺩ‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
‫ﺑﺮﻧﺎﻣﺠﻚ‬
‫ﺃﻛﺜﺮ‬
‫ﺍﺳﺘﺠﺎﺑﺔ‬
، ‫ﻭﺗﻔﺎﻋﻠﻴﺔ‬
ً ‫ﻓﻀﻼ‬
‫ﻋﻦ‬
‫ﺗﺤﺴﻴﻦ‬
‫ﺍﻷﺩﺍء‬
-
‫ﻳﻤﻜﻨﻚ‬
‫ﺇﻧﺸﺎء‬
‫ﺧﻴﻮﻁ‬
‫ﺇﺿﺎﻓﻴﺔ‬
‫ﻟﺘﺸﻐﻴﻞ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‬
‫ﻓﻲ‬
.‫ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻓﻲ‬
Java
،
‫ﻛﻞ‬
‫ﻣﻬﻤﺔ‬
‫ﻫﻲ‬
‫ﻣﺜﻴﻞ‬
‫ﻟﻤﻠﻒ‬
‫ﻗﺎﺑﻞ‬
‫ﻟﻠﺘﺸﻐﻴﻞ‬
، ‫ﺍﻟﻮﺍﺟﻬﺔ‬
‫ﻭﺗﺴﻤﻰ‬
ً‫ﺎ‬‫ﺃﻳﻀ‬
‫ﻣﻠﻒ‬
‫ﻛﺎﺉﻦ‬
‫ﻗﺎﺑﻞ‬
‫ﻟﻠﺘﺸﻐﻴﻞ‬
.
‫ﺃ‬
‫ﻣﺴﻠﻚ‬
‫ﻫﻮ‬
‫ﻓﻲ‬
‫ﺍﻷﺳﺎﺱ‬
‫ﻛﺎﺉﻦ‬
‫ﻳﺴﻬﻞ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﺍﻟﻤﻬﻤﺔ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
5
‫ﺇﻧﺸﺎء‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻭﺍﻟﺨﻴﻮﻁ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
6
:‫ﻣﺜﺎﻝ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﻗﺎﺑﻞ‬
‫ﻟﻠﺘﺸﻐﻴﻞ‬
‫ﻭﺍﺟﻬﺔ‬
‫ﻝ‬
‫ﺇﻧﺸﺎء‬
‫ﻭﺇﻃﻼﻕ‬
‫ﺍﻟﻤﻮﺍﺿﻴﻊ‬
-
:‫ﺍﻟﻬﺪﻑ‬
‫ﺇﻧﺸﺎء‬
‫ﻭﺗﺸﻐﻴﻞ‬
‫ﺛﻼﺙ‬
:‫ﺳﻼﺳﻞ‬
-
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻷﻭﻝ‬
‫ﻳﻄﺒﻊ‬
‫ﺍﻟﺤﺮﻑ‬
‫ﺃ‬
100
.‫ﻣﺮﺓ‬
-
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻟﺜﺎﻧﻲ‬
‫ﻳﻄﺒﻊ‬
‫ﺍﻟﺤﺮﻑ‬
‫ﺏ‬
100
.‫ﻣﺮﺓ‬
-
‫ﻳﻘﻮﻡ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻟﺜﺎﻟﺚ‬
‫ﺑﻄﺒﺎﻋﺔ‬
‫ﺍﻷﻋﺪﺍﺩ‬
‫ﺍﻟﺼﺤﻴﺤﺔ‬
‫ﻣﻦ‬
1
‫ﺇﻟﻰ‬
.100
TaskThreadDemo
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
7
‫ﻓﺉﺔ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻝ‬
‫ﺧﻴﻂ‬
‫ﺗﺤﺘﻮﻱ‬
‫ﺍﻟﻔﺉﺔ‬
‫ﻋﻠﻰ‬
‫ُﺸﺉﻴﻦ‬‫ﻨ‬‫ﺍﻟﻤ‬
‫ﻹﻧﺸﺎء‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﻟﻠﻤﻬﺎﻡ‬
‫ﻭﻃﺮﻕ‬
‫ﺍﻟﺘﺤﻜﻢ‬
‫ﻓﻲ‬
‫ﺳﻼﺳﻞ‬
‫ﺍﻟﺮﺳﺎﺉﻞ‬
.
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
8
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﻌﺎﺉﺪ‬
‫ﺍﻟﺜﺎﺑﺖ‬
()
‫ﻳﻤﻜﻨﻚ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻹﻧﺘﺎﺝ‬
()
‫ﻟﺘﺤﺮﻳﺮ‬
‫ﺍﻟﻮﻗﺖ‬
ً‫ﺎ‬‫ﻣﺆﻗﺘ‬
‫ﻟﻤﺆﺷﺮﺍﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
.‫ﺍﻷﺧﺮﻯ‬
‫ﻋﻠﻰ‬
‫ﺳﺒﻴﻞ‬
، ‫ﺍﻟﻤﺜﺎﻝ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻧﻚ‬
‫ﻗﻤﺖ‬
‫ﺑﺘﻌﺪﻳﻞ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺔ‬
‫ﻓﻲ‬
‫ﺍﻷﺳﻄﺮ‬
57-53
‫ﻓﻲ‬
TaskThreadDemo.java
‫ﻋﻠﻰ‬
‫ﺍﻟﻨﺤﻮ‬
:‫ﺍﻟﺘﺎﻟﻲ‬
‫ﺗﺸﻐﻴﻞ‬
‫ﺑﺎﻃﻞ‬
‫ﻋﺎﻡ‬
()
}
‫ﻟـ‬
)
1
=
i
int
‫؛‬
lastNum
>=
i
‫؛‬
i
+
(+
}
‫؛‬
i(
+
System.out.print )""
( ،
Thread.yield )
{
{
‫ﻓﻲ‬
‫ﻛﻞ‬
‫ﻣﺮﺓ‬
‫ﻳﺘﻢ‬
‫ﻓﻴﻬﺎ‬
‫ﻃﺒﺎﻋﺔ‬
، ‫ﺭﻗﻢ‬
‫ﻳﺘﻢ‬
‫ﺇﻧﺘﺎﺝ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
print100
.
، ‫ﻟﺬﻟﻚ‬
‫ﺗﺘﻢ‬
‫ﻃﺒﺎﻋﺔ‬
‫ﺍﻷﺭﻗﺎﻡ‬
‫ﺑﻌﺪ‬
.‫ﺍﻷﺣﺮﻑ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
9
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﻨﻮﻡ‬
‫ﺍﻟﺜﺎﺑﺖ‬
)
‫ﻣﻠﻠﻲ‬
‫ﺛﺎﻧﻴﺔ‬
(
‫ﺗﻌﻤﻞ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﺴﻜﻮﻥ‬
)
‫ﺍﻟﻄﻮﺍﺣﻴﻦ‬
‫ﺍﻟﻄﻮﻳﻠﺔ‬
(
‫ﻋﻠﻰ‬
‫ﻭﺿﻊ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻓﻲ‬
‫ﻭﺿﻊ‬
‫ﺍﻟﺴﻜﻮﻥ‬
‫ﻟﻠﻔﺘﺮﺓ‬
‫ﺍﻟﻤﺤﺪﺩﺓ‬
‫ﺑﺎﻟﻤﻠﻠﻲ‬
.‫ﺛﺎﻧﻴﺔ‬
‫ﻋﻠﻰ‬
‫ﺳﺒﻴﻞ‬
، ‫ﺍﻟﻤﺜﺎﻝ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻧﻚ‬
‫ﻗﻤﺖ‬
‫ﺑﺘﻌﺪﻳﻞ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺔ‬
‫ﻓﻲ‬
‫ﺍﻷﺳﻄﺮ‬
57-53
‫ﻓﻲ‬
TaskThreadDemo.java
‫ﻋﻠﻰ‬
‫ﺍﻟﻨﺤﻮ‬
:‫ﺍﻟﺘﺎﻟﻲ‬
‫ﺗﺸﻐﻴﻞ‬
‫ﺑﺎﻃﻞ‬
‫ﻋﺎﻡ‬
()
}
‫ﻟـ‬
)
1
=
i
int
‫؛‬
lastNum
>=
i
‫؛‬
i
+
(+
}
‫؛‬
i(
+
System.out.print )""
‫ﻳﺤﺎﻭﻝ‬
}
‫ﺇﺫﺍ‬
)
‫ﺃﻧﺎ‬
<
=
Thread.sleep )1000( (50
‫؛‬
{
{
ex( }
catch )InterruptException
{
{
‫ﻓﻲ‬
‫ﻛﻞ‬
‫ﻣﺮﺓ‬
‫ﻳﺘﻢ‬
‫ﻓﻴﻬﺎ‬
‫ﻃﺒﺎﻋﺔ‬
‫ﺭﻗﻢ‬
<)
=
50
(
،
‫ﻳﺘﻢ‬
‫ﻃﺒﺎﻋﺔ‬
‫ﻣﻠﻒ‬
‫ﻃﺒﺎﻋﺔ‬
100
‫ﻳﺘﻢ‬
‫ﻭﺿﻊ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻓﻲ‬
‫ﻭﺿﻊ‬
‫ﺍﻟﺴﻜﻮﻥ‬
‫ﻟﻤﺪﺓ‬
1
‫ﻣﻠﻠﻲ‬
.‫ﺛﺎﻧﻴﺔ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
10
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻻﻧﻀﻤﺎﻡ‬
()
‫ﻳﻤﻜﻨﻚ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻻﻧﻀﻤﺎﻡ‬
()
‫ﻹﺟﺒﺎﺭ‬
‫ﺧﻴﻂ‬
‫ﻭﺍﺣﺪ‬
‫ﻋﻠﻰ‬
‫ﺍﻻﻧﺘﻈﺎﺭ‬
‫ﺣﺘﻰ‬
‫ﻳﻨﺘﻬﻲ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
.‫ﺁﺧﺮ‬
‫ﻋﻠﻰ‬
‫ﺳﺒﻴﻞ‬
، ‫ﺍﻟﻤﺜﺎﻝ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻧﻚ‬
‫ﻗﻤﺖ‬
‫ﺑﺘﻌﺪﻳﻞ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺔ‬
‫ﻓﻲ‬
‫ﺍﻷﺳﻄﺮ‬
57-53
‫ﻓﻲ‬
TaskThreadDemo.java
‫ﻋﻠﻰ‬
‫ﺍﻟﻨﺤﻮ‬
:‫ﺍﻟﺘﺎﻟﻲ‬
‫ﺍﻟﻔﺮﺍﻍ‬
‫ﺍﻟﻌﺎﻡ‬
‫ﻳﺮﻛﺾ‬
()
}
‫ﺍﻟﻤﻮﺿﻮﻉ‬
4
=
‫ﺍﻟﺠﺪﻳﺪ‬
‫ﺧﻴﻂ‬
)
)
‫ﺍﻟﺠﺪﻳﺪ‬
PrintChar
، ‫ﺝ‬
40
((
‫؛‬
thread4.start
()
،
‫ﻳﺤﺎﻭﻝ‬
}
‫ﺫﻫﺐ‬
)
int
‫ﺃﻧﺎ‬
=
1
‫؛‬
‫ﺃﻧﺎ‬
>
=
lastNum
‫؛‬
‫ﺃﻧﺎ‬
+
(+
}
System.out.print )
""
+
‫ﻁ‬
(
‫؛‬
‫ﺇﺫﺍ‬
)
‫ﺃﻧﺎ‬
==
50
( ‫؛‬
thread4.join )
(
‫ﺧﻴﻂ‬
‫ﻃﺒﺎﻋﺔ‬
100
‫ﺧﻴﻂ‬
‫ﻃﺒﺎﻋﺔ‬
(
printA.join )
‫ﺍﻧﺘﻈﺮ‬
‫ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﻻﻧﻬﺎء‬ {
{
‫ﻗﺒﺾ‬
‫ﻋﻠﻰ‬
)
‫ﺍﺳﺘﺜﻨﺎءﺍﺕ‬
InterruptException
(
{}
‫ﺗﻢ‬
‫ﺍﻻﻧﺘﻬﺎء‬
‫ﻣﻦ‬
‫ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﺗﺘﻢ‬
‫ﻃﺒﺎﻋﺔ‬
‫ﺍﻷﺭﻗﺎﻡ‬
‫ﺑﻌﺪ‬
50
‫ﺑﻌﺪ‬
‫ﺍﻻﻧﺘﻬﺎء‬
‫ﻣﻦ‬
‫ﻃﺒﺎﻋﺔ‬
.‫ﺍﻟﺨﻴﻂ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
11
(
)
‫ﺍﻟﻤﻘﺎﻃﻌﺔ‬
()
،
‫ﻭﺍﻟﻤﻘﺎﻃﻌﺔ‬
( ،
isAlive )
‫ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻃﺮﻳﻘﺔ‬
isAlive
()
‫ﻟﻤﻌﺮﻓﺔ‬
‫ﺣﺎﻟﺔ‬
.‫ﺍﻟﺨﻴﻂ‬
‫ُﺟﻊ‬‫ﺮ‬‫ﻳ‬
ً‫ﺎ‬‫ﺻﺤﻴﺤ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﻣﺆﺷﺮ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
‫ﻓﻲ‬
‫ﺣﺎﻟﺔ‬
‫ﺟﺎﻫﺰ‬
‫ﺃﻭ‬
‫ﻣﺤﻈﻮﺭ‬
‫ﺃﻭ‬
‫ﻗﻴﺪ‬
‫؛‬ ‫ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﺗﻘﻮﻡ‬
‫ﺑﺈﺭﺟﺎﻉ‬
‫ﺧﻄﺄ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﻤﻮﺿﻮﻉ‬
ً‫ﺍ‬‫ﺟﺪﻳﺪ‬
‫ﻭﻟﻢ‬
‫ﻳﺒﺪﺃ‬
‫ﺃﻭ‬
‫ﺇﺫﺍ‬
‫ﺗﻢ‬
‫ﺍﻻﻧﺘﻬﺎء‬
.‫ﻣﻨﻪ‬
‫ﺗﻘﻮﻡ‬
‫ﻃﺮﻳﻘﺔ‬
interrupt
()
‫ﺑﻤﻘﺎﻃﻌﺔ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﺑﺎﻟﻄﺮﻳﻘﺔ‬
:‫ﺍﻟﺘﺎﻟﻴﺔ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﻓﻲ‬
‫ﺣﺎﻟﺔ‬
‫ﺍﻻﺳﺘﻌﺪﺍﺩ‬
‫ﺃﻭ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‬
، ً‫ﺎ‬‫ﺣﺎﻟﻴ‬
‫ﻳﺘﻢ‬
‫ﺗﻌﻴﻴﻦ‬
‫ﻋﻼﻣﺔ‬
‫ﺍﻟﻤﻘﺎﻃﻌﺔ‬
‫ﺍﻟﺨﺎﺻﺔ‬
‫؛‬ ‫ﺑﻪ‬
‫ﺇﺫﺍ‬
‫ﺗﻢ‬
‫ﺣﻈﺮ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
، ً‫ﺎ‬‫ﺣﺎﻟﻴ‬
‫ﻓﺴﻴﺘﻢ‬
‫ﺗﻨﺒﻴﻬﻪ‬
‫ﻭﻳﺪﺧﻞ‬
‫ﻓﻲ‬
‫ﺣﺎﻟﺔ‬
، ‫ﺍﻻﺳﺘﻌﺪﺍﺩ‬
‫ﻭ‬
‫ﺗﻢ‬
‫ﻃﺮﺡ‬
java.io.InterruptException
.
‫ﺗﺨﺘﺒﺮ‬
‫ﻃﺮﻳﻘﺔ‬
isInterrupt
()
‫ﻣﺎ‬
‫ﺇﺫﺍ‬
‫ﺗﻤﺖ‬
‫ﻣﻘﺎﻃﻌﺔ‬
‫ﻣﺆﺷﺮ‬
.‫ﺍﻟﺘﺮﺍﺑﻂ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
12
‫ﺍﻹﻳﻘﺎﻑ‬
‫ﺍﻟﻤﻮﻗﻮﻑ‬
()
‫ﻭﺍﻟﺘﻌﻠﻴﻖ‬
()
‫ﻭ‬
‫ﺍﺳﺘﺉﻨﺎﻑ‬
()
‫ﺍﻟﻄﺮﻕ‬
:‫ﻣﻼﺣﻈﺔ‬
‫ﺗﺤﺘﻮﻱ‬
‫ﻓﺉﺔ‬
‫ﻣﺆﺷﺮ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
ً‫ﺎ‬‫ﺃﻳﻀ‬
‫ﻋﻠﻰ‬
‫ﺃﺳﺎﻟﻴﺐ‬
stop
()
‫ﻭ‬
Suspend
()
‫ﻭ‬
‫ﺍﺳﺘﺉﻨﺎﻑ‬
()
.
ً‫ﺍ‬‫ﺍﻋﺘﺒﺎﺭ‬
‫ﻣﻦ‬
2
Java
،
‫ﻫﺬﻩ‬
‫ﺍﻟﻄﺮﻕ‬
‫ﻫﻲ‬
‫ﺇﻫﻤﺎﻝ‬
)
‫ﺃﻭ‬
‫ﻋﻔﺎ‬
‫ﻋﻠﻴﻬﺎ‬
‫ﺍﻟﺰﻣﻦ‬
(
‫ﻷﻧﻬﺎ‬
‫ﻣﻌﺮﻭﻓﺔ‬
‫ﺑﺄﻧﻬﺎ‬
‫ﻏﻴﺮ‬
‫ﺁﻣﻨﺔ‬
.‫ﺑﻄﺒﻴﻌﺘﻬﺎ‬
‫ﻳﺠﺐ‬
‫ﻋﻠﻴﻚ‬
‫ﺗﻌﻴﻴﻦ‬
‫ﻗﻴﻤﺔ‬
‫ﺧﺎﻟﻴﺔ‬
‫ﺇﻟﻰ‬
‫ﻣﺘﻐﻴﺮ‬
‫ﺳﻠﺴﻠﺔ‬
‫ﺍﻟﺮﺳﺎﺉﻞ‬
‫ﻟﻺﺷﺎﺭﺓ‬
‫ﺇﻟﻰ‬
‫ﺃﻧﻪ‬
‫ﺗﻢ‬
‫ﺇﻳﻘﺎﻓﻪ‬
ً ‫ﺑﺪﻻ‬
‫ﻣﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻃﺮﻳﻘﺔ‬
stop
()
.
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
13
‫ﺍﻷﻭﻟﻮﻳﺔ‬
‫ﻣﻮﺿﻮﻉ‬
-
‫ﻳﺘﻢ‬
‫ﺗﻌﻴﻴﻦ‬
‫ﺃﻭﻟﻮﻳﺔ‬
‫ﺍﻓﺘﺮﺍﺿﻴﺔ‬
‫ﻟﻜﻞ‬
‫ﻣﻮﺿﻮﻉ‬
‫ﻫﻲ‬
.‫ﺍﻟﻤﻮﺿﻮﻉ‬
NORM_PRIORITY
.
‫ﻳﻤﻜﻨﻚ‬
‫ﺇﻋﺎﺩﺓ‬
‫ﺗﻌﻴﻴﻦ‬
‫ﺍﻷﻭﻟﻮﻳﺔ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
int(.
‫ﺃﻭﻟﻮﻳﺔ‬
setPriority )
-
‫ﺑﻌﺾ‬
‫ﺛﻮﺍﺑﺖ‬
‫ﺍﻷﻭﻟﻮﻳﺎﺕ‬
‫ﺗﺸﻤﻞ‬
‫ﺍﻟﻤﻮﺿﻮﻉ‬
‫ﺍﻟﻤﻮﺿﻮﻉ‬
.‫ﺍﻟﻤﻮﺿﻮﻉ‬
NORM_PRIORITY
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
14
:‫ﻣﺜﺎﻝ‬
‫ﻧﺺ‬
‫ﻭﺍﻣﺾ‬
‫ﻓﻼﺷﺘﻴﻜﺴﺖ‬
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
15
‫ﺗﺠﻤﻌﺎﺕ‬
‫ﺍﻟﻤﻮﺿﻮﻉ‬
‫ﻗﺪ‬
‫ﻳﺆﺩﻱ‬
‫ﺑﺪء‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﺟﺪﻳﺪ‬
‫ﻟﻜﻞ‬
‫ﻣﻬﻤﺔ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﺤﺪ‬
‫ﻣﻦ‬
‫ﺍﻹﻧﺘﺎﺟﻴﺔ‬
‫ﻭﻳﺴﺒﺐ‬
ً ‫ﺃﺩﺍء‬
.ً‫ﺎ‬‫ﺿﻌﻴﻔ‬
‫ﻳﻌﺘﺒﺮ‬
‫ﺗﺠﻤﻊ‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
ً ‫ﻣﺜﺎﻟﻴﺎ‬
‫ﻹﺩﺍﺭﺓ‬
‫ﻋﺪﺩ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﺍﻟﺘﻲ‬
‫ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬﻫﺎ‬
‫ﺑﺸﻜﻞ‬
.‫ﻣﺘﺰﺍﻣﻦ‬
‫ﻳﺴﺘﺨﺪﻡ‬
1.5
JDK
‫ﻭﺍﺟﻬﺔ‬
Executor
‫ﻟﺘﻨﻔﻴﺬ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻓﻲ‬
‫ﺗﺠﻤﻊ‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
‫ﻭﻭﺍﺟﻬﺔ‬
ExecutorService
‫ﻹﺩﺍﺭﺓ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻭﺍﻟﺘﺤﻜﻢ‬
.‫ﻓﻴﻬﺎ‬
ExecutorService
‫ﻫﻲ‬
‫ﻭﺍﺟﻬﺔ‬
‫ﻓﺮﻋﻴﺔ‬
‫ﻟـ‬
Executor
.
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
16
‫ﺗﺠﻤﻌﺎﺕ‬
‫ﺍﻟﺨﻴﻂ‬
)
‫ﻣﺘﺎﺑﻌﺔ‬
(
-
‫ﻳﻌﺪ‬
‫ﺇﻧﺸﺎء‬
‫ﻧﻬﺞ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻭﺍﻟﺨﻴﻮﻁ‬
ً‫ﺎ‬‫ﻣﻨﺎﺳﺒ‬
‫ﻟﺘﻨﻔﻴﺬ‬
‫ﻣﻬﻤﺔ‬
، ‫ﻭﺍﺣﺪﺓ‬
‫ﻭﻟﻜﻨﻪ‬
‫ﻏﻴﺮ‬
‫ﻓﻌﺎﻝ‬
‫ﻟﻌﺪﺩ‬
‫ﻛﺒﻴﺮ‬
‫ﻣﻦ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﻷﻧﻪ‬
‫ﻳﺘﻌﻴﻦ‬
‫ﻋﻠﻴﻚ‬
‫ﺇﻧﺸﺎء‬
‫ﺳﻠﺴﻠﺔ‬
‫ﺭﺳﺎﺉﻞ‬
‫ﻟﻜﻞ‬
.‫ﻣﻬﻤﺔ‬
-
‫ﻗﺪ‬
‫ﻳﺆﺩﻱ‬
‫ﺑﺪء‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﺟﺪﻳﺪ‬
‫ﻟﻜﻞ‬
‫ﻣﻬﻤﺔ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﺤﺪ‬
‫ﻣﻦ‬
‫ﺍﻹﻧﺘﺎﺟﻴﺔ‬
‫ﻭﻳﺴﺒﺐ‬
ً ‫ﺃﺩﺍء‬
.ً‫ﺎ‬‫ﺿﻌﻴﻔ‬
-
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺃ‬
‫ﺗﺠﻤﻊ‬
‫ﻣﻮﺿﻮﻉ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﻣﺜﺎﻟﻴﺔ‬
‫ﻹﺩﺍﺭﺓ‬
‫ﻋﺪﺩ‬
‫ﺍﻟﻤﻬﺎﻡ‬
‫ﺍﻟﺘﻲ‬
‫ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬﻫﺎ‬
‫ﺑﺸﻜﻞ‬
.‫ﻣﺘﺰﺍﻣﻦ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
17
‫ﺇﻧﺸﺎء‬
‫ﺍﻟﻤﻨﻔﺬﻳﻦ‬
‫ﻹﻧﺸﺎء‬
‫ﻛﺎﺉﻦ‬
Executor
،
‫ﺍﺳﺘﺨﺪﻡ‬
‫ﺍﻷﺳﺎﻟﻴﺐ‬
‫ﺍﻟﺜﺎﺑﺘﺔ‬
‫ﻓﻲ‬
‫ﻓﺉﺔ‬
Executors
.
ExecutorDemo
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
18
‫ﺍﻟﺘﺰﺍﻣﻦ‬
‫ﺗﺰﺍﻣﻦ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻫﻮ‬
‫ﺗﻨﺴﻴﻖ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﺍﻟﺨﻴﻮﻁ‬
.‫ﺍﻟﺘﺎﺑﻌﺔ‬
‫ﻗﺪ‬
‫ﻳﻜﻮﻥ‬
‫ﺍﻟﻤﻮﺭﺩ‬
‫ﺍﻟﻤﺸﺘﺮﻙ‬
ً‫ﺎ‬‫ﺗﺎﻟﻔ‬
‫ﺇﺫﺍ‬
‫ﺗﻢ‬
‫ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻴﻪ‬
‫ﻓﻲ‬
‫ﻭﻗﺖ‬
‫ﻭﺍﺣﺪ‬
‫ﺑﻮﺍﺳﻄﺔ‬
‫ﻣﺆﺷﺮﺍﺕ‬
‫ﺗﺮﺍﺑﻂ‬
.‫ﻣﺘﻌﺪﺩﺓ‬
‫ﻋﻠﻰ‬
‫ﺳﺒﻴﻞ‬
، ‫ﺍﻟﻤﺜﺎﻝ‬
‫ﻗﺪ‬
‫ﻳﺘﺴﺒﺐ‬
‫ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰ‬
‫ﻧﻔﺲ‬
‫ﺍﻟﺤﺴﺎﺏ‬
‫ﺍﻟﺒﻨﻜﻲ‬
‫ﻓﻲ‬
‫ﺣﺪﻭﺙ‬
‫ﺗﻌﺎﺭﺽ‬
‫ﺑﻴﻦ‬
‫ﻣﺆﺷﺮﺗﻲ‬
‫ﺗﺮﺍﺑﻄﻴﻦ‬
‫ﻏﻴﺮ‬
.‫ﻣﺘﺰﺍﻣﻨﺘﻴﻦ‬
‫ﺧﻄﻮﺓ‬
‫ﺍﻟﺮﺻﻴﺪ‬
‫ﻣﻮﺿﻮﻉ‬
i]
[
‫ﺧﻴﻂ‬
]
‫ﻱ‬
[
1
2
3
4
0
0
1
1
‫؛‬
1
( +
bank.getBalance )
=
newBalance
‫؛‬
1
( +
bank.getBalance )
=
newBalance
‫؛‬
bank.setBalance )newBalance(
‫؛‬
bank.setBalance )newBalance(
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
19
:‫ﻣﺜﺎﻝ‬
‫ﺇﻇﻬﺎﺭ‬
‫ﺗﻌﺎﺭﺽ‬
‫ﺍﻟﻤﻮﺍﺭﺩ‬
:‫ﺍﻟﻬﺪﻑ‬
‫ﻛﺘﺎﺑﺔ‬
‫ﺑﺮﻧﺎﻣﺞ‬
‫ﻳﻮﺿﺢ‬
‫ﻣﺸﻜﻠﺔ‬
‫ﺗﻌﺎﺭﺽ‬
.‫ﺍﻟﻤﻮﺍﺭﺩ‬
‫ﻟﻨﻔﺘﺮﺽ‬
‫ﺃﻧﻚ‬
‫ﻗﻤﺖ‬
‫ﺑﺈﻧﺸﺎء‬
‫ﻭﺗﺸﻐﻴﻞ‬
‫ﻣﺎﺉﺔ‬
، ‫ﻣﻮﺿﻮﻉ‬
‫ﻛﻞ‬
‫ﻣﻨﻬﺎ‬
‫ﻳﻀﻴﻒ‬
ً‫ﺎ‬‫ﻓﻠﺴ‬
ً‫ﺍ‬‫ﻭﺍﺣﺪ‬
‫ﺇﻟﻰ‬
.‫ﺍﻟﺤﺴﺎﺏ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻥ‬
‫ﺍﻟﺤﺴﺎﺏ‬
‫ﻓﺎﺭﻍ‬
‫ﻓﻲ‬
.‫ﺍﻟﺒﺪﺍﻳﺔ‬
AccountWithoutSync
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
20
‫ﺣﺎﻟﺔ‬
‫ﺍﻟﺴﺒﺎﻕ‬
، ‫ﻣﺎ‬
، ‫ﺇﺫﻥ‬
‫ﺳﺒﺐ‬
‫ﺍﻟﺨﻄﺄ‬
‫ﻓﻲ‬
‫ﺍﻟﻤﺜﺎﻝ؟‬
‫ﻫﻨﺎ‬
‫ﺳﻴﻨﺎﺭﻳﻮ‬
:‫ﻣﺤﺘﻤﻞ‬
‫ﺧﻄﻮﺓ‬
‫ﺍﻟﺮﺻﻴﺪ‬
‫ﻣﻬﻤﺔ‬
1
‫ﺍﻟﻤﻬﻤﺔ‬
2
1
2
3
4
0
0
1
1
‫ﺍﻟﺮﺻﻴﺪ‬
+
‫؛‬ 1
=
newBalance
‫ﺍﻟﺮﺻﻴﺪ‬
+
‫؛‬ 1
=
newBalance
‫ﺍﻟﺮﺻﻴﺪ‬
=
newBalance
‫؛‬
‫ﺍﻟﺮﺻﻴﺪ‬
=
newBalance
‫؛‬
‫ﺗﺄﺛﻴﺮ‬
‫ﻫﺬﺍ‬
‫ﺍﻟﺴﻴﻨﺎﺭﻳﻮ‬
‫ﻫﻮ‬
‫ﺃﻥ‬
‫ﺍﻟﻤﻬﻤﺔ‬
1
‫ﻟﻢ‬
‫ﺗﻔﻌﻞ‬
، ً‫ﺎ‬‫ﺷﻴﺉ‬
‫ﻷﻧﻪ‬
‫ﻓﻲ‬
‫ﺍﻟﺨﻄﻮﺓ‬
4
‫ﺗﺘﺠﺎﻭﺯ‬
‫ﺍﻟﻤﻬﻤﺔ‬
2
‫ﻧﺘﻴﺠﺔ‬
‫ﺍﻟﻤﻬﻤﺔ‬
.1
‫ﻣﻦ‬
‫ﺍﻟﻮﺍﺿﺢ‬
‫ﺃﻥ‬
‫ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﺗﻜﻤﻦ‬
‫ﻓﻲ‬
‫ﺃﻥ‬
‫ﺍﻟﻤﻬﻤﺔ‬
1
‫ﻭﺍﻟﻤﻬﻤﺔ‬
2
‫ﺗﺼﻼﻥ‬
‫ﺇﻟﻰ‬
‫ﻣﻮﺭﺩ‬
‫ﻣﺸﺘﺮﻙ‬
‫ﺑﻄﺮﻳﻘﺔ‬
‫ﺗﺴﺒﺐ‬
.‫ﺍﻟﺘﻌﺎﺭﺽ‬
‫ﻫﺬﻩ‬
‫ﻣﺸﻜﻠﺔ‬
‫ﺷﺎﺉﻌﺔ‬
‫ﺗﻌﺮﻑ‬
‫ﺑﺎﺳﻢ‬
a
‫ﺣﺎﻟﺔ‬
‫ﺍﻟﺴﺒﺎﻕ‬
‫ﻓﻲ‬
‫ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻣﺘﻌﺪﺩﺓ‬
‫ﻣﺆﺷﺮﺍﺕ‬
.‫ﺍﻟﺘﺮﺍﺑﻂ‬
‫ﻓﺉﺔ‬
‫ﻳﻘﺎﻝ‬
‫ﺃﻥ‬
‫ﺗﻜﻮﻥ‬
‫ﺧﻴﻮﻁ‬
‫ﺁﻣﻨﺔ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﻛﺎﺉﻦ‬
‫ﻣﻦ‬
‫ﺍﻟﻔﺉﺔ‬
‫ﻻ‬
‫ﻳﺴﺒﺐ‬
‫ﺣﺎﻟﺔ‬
‫ﺳﺒﺎﻕ‬
‫ﻓﻲ‬
‫ﻭﺟﻮﺩ‬
‫ﺳﻼﺳﻞ‬
‫ﻣﺤﺎﺩﺛﺎﺕ‬
.‫ﻣﺘﻌﺪﺩﺓ‬
‫ﻛﻤﺎ‬
‫ﻫﻮ‬
‫ﻣﻮﺿﺢ‬
‫ﻓﻲ‬
‫ﺍﻟﻤﺜﺎﻝ‬
، ‫ﺍﻟﺴﺎﺑﻖ‬
‫ﻓﺉﺔ‬
‫ﺍﻟﺤﺴﺎﺏ‬
‫ﻟﻴﺴﺖ‬
‫ﺁﻣﻨﺔ‬
‫ﻟﻤﺆﺷﺮ‬
.‫ﺍﻟﺘﺮﺍﺑﻂ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
21
‫ﺍﻝ‬
‫ﻣﺘﺰﺍﻣﻦ‬
‫ﻛﻠﻤﺔ‬
‫ﺭﺉﻴﺴﻴﺔ‬
‫ﻟﺘﺠﻨﺐ‬
‫ﻇﺮﻭﻑ‬
، ‫ﺍﻟﺴﺒﺎﻕ‬
‫ﻳﺠﺐ‬
‫ﻣﻨﻊ‬
‫ﺃﻛﺜﺮ‬
‫ﻣﻦ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﻭﺍﺣﺪ‬
‫ﻣﻦ‬
‫ﺍﻟﺪﺧﻮﻝ‬
‫ﻓﻲ‬
‫ﻭﻗﺖ‬
‫ﻭﺍﺣﺪ‬
‫ﺇﻟﻰ‬
‫ﺟﺰء‬
‫ﻣﻌﻴﻦ‬
‫ﻣﻦ‬
، ‫ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻭﺍﻟﻤﻌﺮﻭﻑ‬
‫ﺑﺎﺳﻢ‬
‫ﺍﻟﻤﻨﻄﻘﺔ‬
.‫ﺍﻟﺤﺮﺟﺔ‬
‫ﺍﻟﻤﻨﻄﻘﺔ‬
‫ﺍﻟﺤﺮﺟﺔ‬
‫ﻓﻲ‬
‫ﺍﻟﻘﺎﺉﻤﺔ‬
30.5
‫ﻫﻲ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻹﻳﺪﺍﻉ‬
.‫ﺑﺄﻛﻤﻠﻬﺎ‬
‫ﻳﻤﻜﻨﻚ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﻜﻠﻤﺔ‬
‫ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‬
‫ﻟﻤﺰﺍﻣﻨﺔ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺑﺤﻴﺚ‬
‫ﻳﻤﻜﻦ‬
‫ﻟﻤﺆﺷﺮ‬
‫ﻭﺍﺣﺪ‬
‫ﻓﻘﻂ‬
‫ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻓﻲ‬
‫ﻛﻞ‬
.‫ﻣﺮﺓ‬
‫ﻫﻨﺎﻙ‬
‫ﻋﺪﺓ‬
‫ﻃﺮﻕ‬
‫ﻟﺘﺼﺤﻴﺢ‬
‫ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﻓﻲ‬
‫ﺍﻟﻘﺎﺉﻤﺔ‬
، 30.5
‫ﺗﺘﻤﺜﻞ‬
‫ﺇﺣﺪﻯ‬
‫ﺍﻟﻄﺮﻕ‬
‫ﻓﻲ‬
‫ﺟﻌﻞ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﺍﻟﺤﺴﺎﺏ‬
ً‫ﺎ‬‫ﺁﻣﻨ‬
‫ﻋﻦ‬
‫ﻃﺮﻳﻖ‬
‫ﺇﺿﺎﻓﺔ‬
‫ﺍﻟﻜﻠﻤﺔ‬
‫ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‬
‫ﻓﻲ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻹﻳﺪﺍﻉ‬
‫ﻓﻲ‬
‫ﺍﻟﺴﻄﺮ‬
45
‫ﻋﻠﻰ‬
‫ﺍﻟﻨﺤﻮ‬
:‫ﺍﻟﺘﺎﻟﻲ‬
‫ﻭﺩﻳﻌﺔ‬
‫ﺑﺎﻃﻠﺔ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
‫ﻋﺎﻣﺔ‬
)
‫ﻣﺒﻠﻎ‬
‫ﻣﻀﺎﻋﻒ‬
(
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
22
‫ﻣﺰﺍﻣﻨﺔ‬
‫ﻃﺮﻕ‬
‫ﺍﻟﻤﺜﻴﻞ‬
‫ﻭ‬
‫ﻃﺮﻕ‬
‫ﺛﺎﺑﺘﺔ‬
‫ﺗﻜﺘﺴﺐ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‬
ً‫ﻼ‬‫ﻗﻔ‬
‫ﻗﺒﻞ‬
.‫ﺗﻨﻔﻴﺬﻫﺎ‬
‫ﻓﻲ‬
‫ﺣﺎﻟﺔ‬
‫ﻃﺮﻳﻘﺔ‬
، ‫ﺍﻟﻤﺜﻴﻞ‬
‫ﻳﻜﻮﻥ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﻜﺎﺉﻦ‬
‫ﺍﻟﺬﻱ‬
‫ﺗﻢ‬
‫ﺍﺳﺘﺪﻋﺎء‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻣﻦ‬
.‫ﺃﺟﻠﻪ‬
‫ﻓﻲ‬
‫ﺣﺎﻟﺔ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
، ‫ﺍﻟﺜﺎﺑﺘﺔ‬
‫ﻳﻜﻮﻥ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﻋﻠﻰ‬
.‫ﺍﻟﻔﺉﺔ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺃﺣﺪ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻳﺴﺘﺪﻋﻲ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﻣﺜﻴﻞ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
)
‫ﻋﻠﻰ‬
، ‫ﺍﻟﺘﻮﺍﻟﻲ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺛﺎﺑﺘﺔ‬
(
‫ﻋﻠﻰ‬
، ‫ﻛﺎﺉﻦ‬
‫ﻳﺘﻢ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻫﺬﺍ‬
‫ﺍﻟﻜﺎﺉﻦ‬
)
‫ﻋﻠﻰ‬
، ‫ﺍﻟﺘﻮﺍﻟﻲ‬
‫ﺍﻟﻔﺉﺔ‬
(
،ً ‫ﺃﻭﻻ‬
‫ﺛﻢ‬
‫ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬ‬
، ‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻭﻓﻲ‬
‫ﺍﻟﻨﻬﺎﻳﺔ‬
‫ﻳﺘﻢ‬
‫ﺗﺤﺮﻳﺮ‬
.‫ﺍﻟﻘﻔﻞ‬
‫ﻳﺘﻢ‬
‫ﺣﻈﺮ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
‫ﺁﺧﺮ‬
‫ﻳﺴﺘﺪﻋﻲ‬
‫ﻧﻔﺲ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻟﻬﺬﺍ‬
‫ﺍﻟﻜﺎﺉﻦ‬
)
‫ﻋﻠﻰ‬
، ‫ﺍﻟﺘﻮﺍﻟﻲ‬
‫ﺍﻟﻔﺉﺔ‬
(
‫ﺣﺘﻰ‬
‫ﻳﺘﻢ‬
‫ﺗﺤﺮﻳﺮ‬
.‫ﺍﻟﻘﻔﻞ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
23
‫ﻣﺰﺍﻣﻨﺔ‬
‫ﻃﺮﻕ‬
‫ﺍﻟﻤﺜﻴﻞ‬
‫ﻭ‬
‫ﻃﺮﻕ‬
‫ﺛﺎﺑﺘﺔ‬
‫ﻣﻊ‬
‫ﻣﺰﺍﻣﻨﺔ‬
‫ﻃﺮﻳﻘﺔ‬
، ‫ﺍﻹﻳﺪﺍﻉ‬
‫ﻻ‬
‫ﻳﻤﻜﻦ‬
‫ﺃﻥ‬
‫ﻳﺤﺪﺙ‬
‫ﺍﻟﺴﻴﻨﺎﺭﻳﻮ‬
.‫ﺍﻟﺴﺎﺑﻖ‬
‫ﺇﺫﺍ‬
‫ﺑﺪﺃﺕ‬
‫ﺍﻟﻤﻬﻤﺔ‬
2
‫ﻓﻲ‬
‫ﺇﺩﺧﺎﻝ‬
، ‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻭﻛﺎﻧﺖ‬
‫ﺍﻟﻤﻬﻤﺔ‬
1
‫ﻣﻮﺟﻮﺩﺓ‬
‫ﺑﺎﻟﻔﻌﻞ‬
‫ﻓﻲ‬
، ‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻓﺴﻴﺘﻢ‬
‫ﺣﻈﺮ‬
‫ﺍﻟﻤﻬﻤﺔ‬
2
‫ﺣﺘﻰ‬
‫ﺗﻨﺘﻬﻲ‬
‫ﺍﻟﻤﻬﻤﺔ‬
1
‫ﻣﻦ‬
.‫ﺍﻟﻄﺮﻳﻘﺔ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
24
‫ﻣﺰﺍﻣﻨﺔ‬
‫ﺍﻟﻤﻬﺎﻡ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
25
‫ﻣﺰﺍﻣﻨﺔ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺇﻥ‬
‫ﺍﺳﺘﺪﻋﺎء‬
‫ﻃﺮﻳﻘﺔ‬
‫ﻣﺜﻴﻞ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
‫ﻟﻜﺎﺉﻦ‬
‫ﻣﺎ‬
‫ﻳﻜﺘﺴﺐ‬
ً‫ﻼ‬‫ﻗﻔ‬
‫ﻋﻠﻰ‬
، ‫ﺍﻟﻜﺎﺉﻦ‬
‫ﻭﻳﺆﺩﻱ‬
‫ﺍﺳﺘﺪﻋﺎء‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺛﺎﺑﺘﺔ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
‫ﻟﻔﺉﺔ‬
‫ﻣﺎ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
.‫ﻟﻠﻔﺉﺔ‬
‫ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﻌﺒﺎﺭﺓ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‬
‫ﻟﻠﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
‫ﺃﻱ‬
، ‫ﻛﺎﺉﻦ‬
‫ﻭﻟﻴﺲ‬
‫ﻓﻘﻂ‬
‫ﻫﺬﻩ‬
، ‫ﻛﺎﺉﻦ‬
‫ﻋﻨﺪ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﻛﺘﻠﺔ‬
‫ﻣﻦ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺔ‬
‫ﻓﻲ‬
.‫ﻃﺮﻳﻘﺔ‬
‫ﻳﺸﺎﺭ‬
‫ﺇﻟﻰ‬
‫ﻫﺬﻩ‬
‫ﺍﻟﻜﺘﻠﺔ‬
‫ﺑﺎﺳﻢ‬
‫ﻛﺘﻠﺔ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
.
‫ﺍﻟﺸﻜﻞ‬
‫ﺍﻟﻌﺎﻡ‬
‫ﻟﻠﺒﻴﺎﻥ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻦ‬
‫ﻫﻮ‬
‫ﻛﻤﺎ‬
:‫ﻳﻠﻲ‬
‫ﻣﺘﺰﺍﻣﻦ‬
expr)
(
}
‫ﺻﻴﺎﻏﺎﺕ؛‬
{
‫ﻳﺠﺐ‬
‫ﺗﻘﻴﻴﻢ‬
‫ﺍﻟﺘﻌﺒﻴﺮ‬
expr
‫ﺇﻟﻰ‬
‫ﻣﺮﺟﻊ‬
.‫ﻛﺎﺉﻦ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﻜﺎﺉﻦ‬
ً‫ﺎ‬‫ﻣﺆﻣﻨ‬
‫ﺑﺎﻟﻔﻌﻞ‬
‫ﺑﻮﺍﺳﻄﺔ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
، ‫ﺁﺧﺮ‬
‫ﻓﺴﻴﺘﻢ‬
‫ﺣﻈﺮ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺣﺘﻰ‬
‫ﻳﺘﻢ‬
‫ﺗﺤﺮﻳﺮ‬
.‫ﺍﻟﻘﻔﻞ‬
‫ﻋﻨﺪ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
، ‫ﺍﻟﻜﺎﺉﻦ‬
‫ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕ‬
‫ﺍﻟﻤﻮﺟﻮﺩﺓ‬
‫ﻓﻲ‬
‫ﺍﻟﻜﺘﻠﺔ‬
، ‫ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‬
‫ﺛﻢ‬
‫ﻳﺘﻢ‬
‫ﺗﺤﺮﻳﺮ‬
.‫ﺍﻟﻘﻔﻞ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
26
‫ﻣﺰﺍﻣﻨﺔ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‬
.‫ﻣﻘﺎﺑﻞ‬
‫ﻃﺮﻕ‬
‫ﻳﻤﻜﻦ‬
‫ﺗﺤﻮﻳﻞ‬
‫ﺃﻱ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﻣﺜﻴﻞ‬
‫ﻣﺘﺰﺍﻣﻨﺔ‬
‫ﺇﻟﻰ‬
‫ﺑﻴﺎﻥ‬
.‫ﻣﺘﺰﺍﻣﻦ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻥ‬
‫ﻣﺎ‬
‫ﻳﻠﻲ‬
‫ﻫﻮ‬
‫ﺃﺳﻠﻮﺏ‬
‫ﻣﺜﻴﻞ‬
:‫ﻣﺘﺰﺍﻣﻦ‬
}
(
)
‫ﻋﺎﻡ‬
‫ﺑﺎﻃﻞ‬
‫ﻣﺘﺰﺍﻣﻦ‬
xMethod
//
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﺠﺴﻢ‬
{
‫ﻫﺬﻩ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺗﻌﺎﺩﻝ‬
}
(
)
‫ﺍﻟﻌﺎﻣﺔ‬
‫ﺑﺎﻃﻞ‬
xMethod
‫ﻣﺘﺰﺍﻣﻦ‬
)
‫ﻫﺬﺍ‬
(
}
//
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﺠﺴﻢ‬
{
{
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
27
‫ﺍﻟﺘﺰﺍﻣﻦ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﻳﻜﺘﺴﺐ‬
‫ﺃﺳﻠﻮﺏ‬
‫ﺍﻟﻤﺜﻴﻞ‬
‫ﺍﻟﻤﺘﺰﺍﻣﻦ‬
ً‫ﺎ‬‫ﺿﻤﻨﻴ‬
ً‫ﻼ‬‫ﻗﻔ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﻤﺜﻴﻞ‬
‫ﻗﺒﻞ‬
‫ﺗﻨﻔﻴﺬ‬
.‫ﺍﻟﻄﺮﻳﻘﺔ‬
‫ّﻚ‬‫ﻨ‬‫ﻳﻤﻜ‬
1.5
JDK
‫ﻣﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﺑﺸﻜﻞ‬
.‫ﺻﺮﻳﺢ‬
‫ﺗﺘﻤﻴﺰ‬
‫ﻣﻴﺰﺍﺕ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﺍﻟﺠﺪﻳﺪﺓ‬
‫ﺑﺎﻟﻤﺮﻭﻧﺔ‬
‫ﻭﺗﻤﻨﺤﻚ‬
ً‫ﺍ‬‫ﻣﺰﻳﺪ‬
‫ﻣﻦ‬
‫ﺍﻟﺘﺤﻜﻢ‬
‫ﻟﺘﻨﺴﻴﻖ‬
‫ﺳﻼﺳﻞ‬
.‫ﺍﻟﺮﺳﺎﺉﻞ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﻫﻮ‬
‫ﻣﺜﻴﻞ‬
‫ﻟﻮﺍﺟﻬﺔ‬
Lock
،
‫ﻭﺍﻟﺬﻱ‬
‫ﻳﻌﻠﻦ‬
‫ﻋﻦ‬
‫ﻃﺮﻕ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﺍﻷﻗﻔﺎﻝ‬
.‫ﻭﺗﺤﺮﻳﺮﻫﺎ‬
‫ﻗﺪ‬
‫ﻳﺴﺘﺨﺪﻡ‬
‫ﺍﻟﻘﻔﻞ‬
ً‫ﺎ‬‫ﺃﻳﻀ‬
‫ﻃﺮﻳﻘﺔ‬
newCondition
()
‫ﻹﻧﺸﺎء‬
‫ﺃﻱ‬
‫ﻋﺪﺩ‬
‫ﻣﻦ‬
‫ﻛﺎﺉﻨﺎﺕ‬
، ‫ﺍﻟﺤﺎﻟﺔ‬
‫ﻭﺍﻟﺘﻲ‬
‫ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‬
‫ﻻﺗﺼﺎﻻﺕ‬
‫ﻣﺆﺷﺮ‬
.‫ﺍﻟﺘﺮﺍﺑﻂ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
28
‫ﺳﻴﺎﺳﺔ‬
‫ﺍﻹﻧﺼﺎﻑ‬
‫ﻹﻧﺸﺎء‬.
‫ﺃﻗﻔﺎﻝ‬
‫ﺣﺼﺮﻳﺔ‬
.‫ﻣﺘﺒﺎﺩﻟﺔ‬
‫ﻳﻤﻜﻨﻚ‬
‫ﺇﻧﺸﺎء‬
‫ﻗﻔﻞ‬
‫ﻣﻊ‬
‫ﺳﻴﺎﺳﺔ‬
‫ﺍﻹﻧﺼﺎﻑ‬
.‫ﺍﻟﻤﺤﺪﺩﺓ‬
‫ﺗﻀﻤﻦ‬
‫ﺳﻴﺎﺳﺎﺕ‬
‫ﺍﻹﻧﺼﺎﻑ‬
‫ﺍﻟﺤﻘﻴﻘﻴﺔ‬
‫ﺃﻃﻮﻝ‬
‫ﺳﻠﺴﻠﺔ‬
‫ﺍﻧﺘﻈﺎﺭ‬
‫ﻟﻠﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﻘﻔﻞ‬
ً.‫ﺃﻭﻻ‬
‫ﺗﻤﻨﺢ‬
‫ﺳﻴﺎﺳﺎﺕ‬
‫ﺍﻹﻧﺼﺎﻑ‬
‫ﺍﻟﻜﺎﺫﺑﺔ‬
ً‫ﻼ‬‫ﻗﻔ‬
‫ﻟﺴﻠﺴﻠﺔ‬
‫ﺍﻧﺘﻈﺎﺭ‬
‫ﺩﻭﻥ‬
‫ﺃﻱ‬
‫ﺃﻣﺮ‬
.‫ﻭﺻﻮﻝ‬
‫ﻗﺪ‬
‫ﻳﻜﻮﻥ‬
‫ﺃﺩﺍء‬
‫ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﺘﻲ‬
‫ﺗﺴﺘﺨﺪﻡ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﺍﻟﻌﺎﺩﻟﺔ‬
‫ﺍﻟﺘﻲ‬
‫ﺗﻢ‬
‫ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻴﻬﺎ‬
‫ﻣﻦ‬
‫ﻗﺒﻞ‬
‫ﺍﻟﻌﺪﻳﺪ‬
‫ﻣﻦ‬
‫ﺳﻼﺳﻞ‬
‫ﺍﻟﻤﺤﺎﺩﺛﺎﺕ‬
ً‫ﺎ‬‫ﺿﻌﻴﻔ‬
‫ﺑﺸﻜﻞ‬
‫ﻋﺎﻡ‬
‫ﻣﻘﺎﺭﻧﺔ‬
‫ﺑﺘﻠﻚ‬
‫ﺍﻟﺘﻲ‬
‫ﺗﺴﺘﺨﺪﻡ‬
‫ﺍﻹﻋﺪﺍﺩ‬
، ‫ﺍﻻﻓﺘﺮﺍﺿﻲ‬
‫ﻭﻟﻜﻦ‬
‫ﻟﻬﺎ‬
‫ﺗﺒﺎﻳﻨﺎﺕ‬
‫ﺃﻗﻞ‬
‫ﻓﻲ‬
‫ﺍﻷﻭﻗﺎﺕ‬
‫ﻟﻠﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﻭﺿﻤﺎﻥ‬
‫ﻋﺪﻡ‬
‫ﺍﻟﺘﺠﻮﻳﻊ‬
Lock
‫ﻫﻮ‬
‫ﺗﻄﺒﻴﻖ‬
‫ﻣﻠﻤﻮﺱ‬
‫ﻟـ‬
ReentrantLock
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
29
:‫ﻣﺜﺎﻝ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﻳﺮﺍﺟﻊ‬
‫ﻫﺬﺍ‬
‫ﺍﻟﻤﺜﺎﻝ‬
AccountWithoutSync.java
‫ﻟﻤﺰﺍﻣﻨﺔ‬
‫ﺗﻌﺪﻳﻞ‬
‫ﺍﻟﺤﺴﺎﺏ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺃﻗﻔﺎﻝ‬
.‫ﺻﺮﻳﺤﺔ‬
AccountWithSyncUsingLock
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
30
‫ﺍﻟﺘﻌﺎﻭﻥ‬
‫ﺑﻴﻦ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﺸﺮﻭﻁ‬
‫ﻟﺘﺴﻬﻴﻞ‬
‫ﺍﻻﺗﺼﺎﻻﺕ‬
‫ﺑﻴﻦ‬
.‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻳﻤﻜﻦ‬
‫ﺃﻥ‬
‫ﻳﺤﺪﺩ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻣﺎ‬
‫ﻳﺠﺐ‬
‫ﺍﻟﻘﻴﺎﻡ‬
‫ﺑﻪ‬
‫ﻓﻲ‬
‫ﻇﻞ‬
‫ﺷﺮﻁ‬
.‫ﻣﻌﻴﻦ‬
‫ﺍﻟﺸﺮﻭﻁ‬
‫ﻫﻲ‬
‫ﻛﺎﺉﻨﺎﺕ‬
‫ﺗﻢ‬
‫ﺇﻧﺸﺎﺅﻫﺎ‬
‫ﻋﻦ‬
‫ﻃﺮﻳﻖ‬
‫ﺍﺳﺘﺪﻋﺎء‬
‫ﻃﺮﻳﻘﺔ‬
newCondition
()
‫ﻋﻠﻰ‬
‫ﻛﺎﺉﻦ‬
Lock
.
‫ﺑﻤﺠﺮﺩ‬
‫ﺇﻧﺸﺎء‬
، ‫ﺍﻟﺸﺮﻁ‬
‫ﻳﻤﻜﻨﻚ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻃﺮﻕ‬
‫ﺍﻧﺘﻈﺎﺭ‬
()
،
‫ﻭ‬
signal
()
،
‫ﻭ‬
signalAll
()
‫ﻻﺗﺼﺎﻻﺕ‬
‫ﻣﺆﺷﺮ‬
.‫ﺍﻟﺘﺮﺍﺑﻂ‬
‫ﺗﺘﺴﺒﺐ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻻﻧﺘﻈﺎﺭ‬
()
‫ﻓﻲ‬
‫ﺍﻧﺘﻈﺎﺭ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻟﺤﺎﻟﻲ‬
‫ﺣﺘﻰ‬
‫ﻳﺘﻢ‬
‫ﺍﻹﺷﺎﺭﺓ‬
‫ﺇﻟﻰ‬
.‫ﺍﻟﺤﺎﻟﺔ‬
‫ﺗﺴﺘﻴﻘﻆ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻹﺷﺎﺭﺓ‬
()
‫ﺧﻴﻂ‬
‫ﺍﻧﺘﻈﺎﺭ‬
، ‫ﻭﺍﺣﺪ‬
‫ﻭﺗﻮﻗﻆ‬
‫ﻃﺮﻳﻘﺔ‬
()
signalAll
‫ﺟﻤﻴﻊ‬
‫ﺧﻴﻮﻁ‬
.‫ﺍﻻﻧﺘﻈﺎﺭ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
31
‫ﺍﻟﺘﻌﺎﻭﻥ‬
‫ﺑﻴﻦ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﻟﻤﺰﺍﻣﻨﺔ‬
، ‫ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﺳﺘﺨﺪﻡ‬
ً‫ﻼ‬‫ﻗﻔ‬
:‫ﺑﺸﺮﻁ‬
newDeposit
)
‫ﺃﻱ‬
‫ﺇﻳﺪﺍﻉ‬
‫ﺟﺪﻳﺪ‬
‫ﻣﻀﺎﻑ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﺤﺴﺎﺏ‬
(
.
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﺮﺻﻴﺪ‬
‫ﺃﻗﻞ‬
‫ﻣﻦ‬
‫ﺍﻟﻤﺒﻠﻎ‬
‫ﺍﻟﻤﺮﺍﺩ‬
، ‫ﺳﺤﺒﻪ‬
‫ﻓﺴﺘﻨﺘﻈﺮ‬
‫ﻣﻬﻤﺔ‬
‫ﺍﻟﺴﺤﺐ‬
‫ﺣﺎﻟﺔ‬
‫ﺍﻹﻳﺪﺍﻉ‬
.‫ﺍﻟﺠﺪﻳﺪﺓ‬
‫ﻋﻨﺪﻣﺎ‬
‫ﺗﻀﻴﻒ‬
‫ﻣﻬﻤﺔ‬
‫ﺍﻹﻳﺪﺍﻉ‬
ً ‫ﺃﻣﻮﺍﻻ‬
‫ﺇﻟﻰ‬
، ‫ﺍﻟﺤﺴﺎﺏ‬
‫ﻓﺈﻥ‬
‫ﺍﻟﻤﻬﻤﺔ‬
‫ﺗﺸﻴﺮ‬
‫ﺇﻟﻰ‬
‫ﻣﻬﻤﺔ‬
‫ﺳﺤﺐ‬
‫ﺍﻻﻧﺘﻈﺎﺭ‬
‫ﻟﻠﻤﺤﺎﻭﻟﺔ‬
‫ﻣﺮﺓ‬
.‫ﺃﺧﺮﻯ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
32
:‫ﻣﺜﺎﻝ‬
‫ﺍﻟﺘﻌﺎﻭﻥ‬
‫ﻣﻮﺿﻮﻉ‬
‫ﺍﻛﺘﺐ‬
ً‫ﺎ‬‫ﺑﺮﻧﺎﻣﺠ‬
‫ﻳﻮﺿﺢ‬
‫ﺗﻌﺎﻭﻥ‬
.‫ﺍﻟﺨﻴﻂ‬
‫ﻟﻨﻔﺘﺮﺽ‬
‫ﺃﻧﻚ‬
‫ﻗﻤﺖ‬
‫ﺑﺈﻧﺸﺎء‬
‫ﻭﺇﻃﻼﻕ‬
، ‫ﻣﻮﺿﻮﻋﻴﻦ‬
‫ﺃﺣﺪﻫﻤﺎ‬
‫ﺇﻳﺪﺍﻉ‬
‫ﻓﻲ‬
، ‫ﺣﺴﺎﺏ‬
‫ﻭﺍﻵﺧﺮ‬
‫ﻳﺴﺤﺐ‬
‫ﻣﻦ‬
‫ﻧﻔﺲ‬
.‫ﺍﻟﺤﺴﺎﺏ‬
‫ﻳﺠﺐ‬
‫ﺃﻥ‬
‫ﻳﻨﺘﻈﺮ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻟﺜﺎﻧﻲ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﻤﺒﻠﻎ‬
‫ﺍﻟﻤﺮﺍﺩ‬
‫ﺳﺤﺒﻪ‬
‫ﺃﻛﺒﺮ‬
‫ﻣﻦ‬
‫ﺍﻟﺮﺻﻴﺪ‬
‫ﺍﻟﺤﺎﻟﻲ‬
‫ﻓﻲ‬
.‫ﺍﻟﺤﺴﺎﺏ‬
‫ﻋﻨﺪﻣﺎ‬
‫ﻳﺘﻢ‬
‫ﺇﻳﺪﺍﻉ‬
‫ﺃﻣﻮﺍﻝ‬
‫ﺟﺪﻳﺪﺓ‬
‫ﻓﻲ‬
، ‫ﺍﻟﺤﺴﺎﺏ‬
‫ﻳﻘﻮﻡ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻷﻭﻝ‬
‫ﺑﺈﻋﻼﻡ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻟﺜﺎﻧﻲ‬
.‫ﻻﺳﺘﺉﻨﺎﻓﻪ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﻤﺒﻠﻎ‬
‫ﻻ‬
‫ﻳﺰﺍﻝ‬
‫ﻏﻴﺮ‬
ٍ ‫ﻛﺎﻑ‬
، ‫ﻟﻠﺴﺤﺐ‬
‫ﻓﻴﺠﺐ‬
‫ﺃﻥ‬
‫ﻳﺴﺘﻤﺮ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﺍﻟﺜﺎﻧﻲ‬
‫ﻓﻲ‬
‫ﺍﻧﺘﻈﺎﺭ‬
‫ﺍﻟﻤﺰﻳﺪ‬
‫ﻣﻦ‬
‫ﺍﻷﻣﻮﺍﻝ‬
‫ﻓﻲ‬
.‫ﺍﻟﺤﺴﺎﺏ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻥ‬
‫ﺍﻟﺮﺻﻴﺪ‬
‫ﺍﻷﻭﻟﻲ‬
‫ﻫﻮ‬
0
‫ﻭﺃﻥ‬
‫ﺍﻟﻤﺒﻠﻎ‬
‫ﺍﻟﻤﺮﺍﺩ‬
‫ﺇﻳﺪﺍﻋﻪ‬
‫ﻭﺳﺤﺒﻪ‬
‫ﻳﺘﻢ‬
‫ﺇﻧﺸﺎﺅﻩ‬
.ً‫ﺎ‬‫ﻋﺸﻮﺍﺉﻴ‬
‫ﻣﻮﺿﻮﻉ‬
‫ﺍﻟﺘﻌﺎﻭﻥ‬
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
33
‫ﺩﺭﺍﺳﺔ‬
:‫ﺣﺎﻟﺔ‬
‫ﺍﻟﻤﻨﺘﺞ‬
/
‫ﺍﻟﻤﺴﺘﻬﻠﻚ‬
)
‫ﺍﺧﺘﻴﺎﺭﻱ‬
(
‫ﺧﺬ‬
‫ﺑﻌﻴﻦ‬
‫ﺍﻻﻋﺘﺒﺎﺭ‬
‫ﻣﺜﺎﻝ‬
‫ﺍﻟﻤﺴﺘﻬﻠﻚ‬
/
‫ﺍﻟﻤﻨﺘﺞ‬
.‫ﺍﻟﻜﻼﺳﻴﻜﻲ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻧﻚ‬
‫ﺗﺴﺘﺨﺪﻡ‬
ً‫ﺎ‬‫ﻣﺨﺰﻧ‬
ً‫ﺎ‬‫ﻣﺆﻗﺘ‬
‫ﻟﺘﺨﺰﻳﻦ‬
‫ﺃﻋﺪﺍﺩ‬
.‫ﺻﺤﻴﺤﺔ‬
‫ﺣﺠﻢ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
.‫ﻣﺤﺪﻭﺩ‬
‫ﻳﻮﻓﺮ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
‫ﺃﺳﻠﻮﺏ‬
‫ﺍﻟﻜﺘﺎﺑﺔ‬
int)
(
‫ﻹﺿﺎﻓﺔ‬
‫ﻗﻴﻤﺔ‬
int
‫ﺇﻟﻰ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
‫ﻭﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻗﺮﺍءﺓ‬
()
‫ﻟﻘﺮﺍءﺓ‬
‫ﻭﺣﺬﻑ‬
‫ﻗﻴﻤﺔ‬
int
‫ﻣﻦ‬
‫ﺍﻟﻤﺨﺰﻥ‬
.‫ﺍﻟﻤﺆﻗﺖ‬
‫ﻟﻤﺰﺍﻣﻨﺔ‬
، ‫ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﺳﺘﺨﺪﻡ‬
ً‫ﻼ‬‫ﻗﻔ‬
:‫ﺑﺸﺮﻃﻴﻦ‬
notEmpty
)
، ‫ﺃﻱ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
‫ﻟﻴﺲ‬
‫ﻓﺎﺭﻏﺎ‬
(ً
‫ﻭ‬
notFull
)
، ‫ﺃﻱ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
‫ﻏﻴﺮ‬
‫ﻣﻤﺘﻠﺊ‬
(
.
‫ﻋﻨﺪﻣﺎ‬
‫ﺗﻀﻴﻒ‬
‫ﻣﻬﻤﺔ‬
int
‫ﺇﻟﻰ‬
‫ﺍﻟﻤﺨﺰﻥ‬
، ‫ﺍﻟﻤﺆﻗﺖ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
، ً‫ﺎ‬‫ﻣﻤﺘﻠﺉ‬
‫ﻓﺴﺘﻨﺘﻈﺮ‬
‫ﺍﻟﻤﻬﻤﺔ‬
‫ﺣﺎﻟﺔ‬
notFull
.
‫ﻋﻨﺪﻣﺎ‬
‫ﺗﻘﻮﻡ‬
‫ﻣﻬﻤﺔ‬
‫ﺑﺤﺬﻑ‬
‫ﻋﺪﺩ‬
‫ﺻﺤﻴﺢ‬
‫ﻣﻦ‬
‫ﺍﻟﻤﺨﺰﻥ‬
، ‫ﺍﻟﻤﺆﻗﺖ‬
‫ﺇﺫﺍ‬
‫ﻛﺎﻥ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
، ً‫ﺎ‬‫ﻓﺎﺭﻏ‬
‫ﻓﺴﺘﻨﺘﻈﺮ‬
‫ﺍﻟﻤﻬﻤﺔ‬
‫ﺣﺎﻟﺔ‬
notEmpty
.
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
34
‫ﺩﺭﺍﺳﺔ‬
:‫ﺣﺎﻟﺔ‬
‫ﺍﻟﻤﻨﺘﺞ‬
/
‫ﺍﻟﻤﺴﺘﻬﻠﻚ‬
)
‫ﺍﺧﺘﻴﺎﺭﻱ‬
(
‫ﻗﺎﺉﻤﺔ‬
30.8
‫ﻳﻌﺮﺽ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ‬
.‫ﺍﻟﻜﺎﻣﻞ‬
‫ﻳﺤﺘﻮﻱ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻋﻠﻰ‬
‫ﻓﺉﺔ‬
Buffer
)
‫ﺍﻷﺳﻄﺮ‬
89-43
(
‫ﻭﻣﻬﻤﺘﻴﻦ‬
‫ﻹﻧﺘﺎﺝ‬
‫ﻭﺍﺳﺘﻬﻼﻙ‬
‫ﺍﻷﺭﻗﺎﻡ‬
‫ﺑﺸﻜﻞ‬
‫ﻣﺘﻜﺮﺭ‬
‫ﻣﻦ‬
‫ﻭﺇﻟﻰ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
)
‫ﺍﻷﺳﻄﺮ‬
41-15
(
.
‫ﺗﻀﻴﻒ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﻜﺘﺎﺑﺔ‬
int)
(
)
‫ﺍﻟﺴﻄﺮ‬
58
(
ً‫ﺍ‬‫ﻋﺪﺩ‬
ً‫ﺎ‬‫ﺻﺤﻴﺤ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﻤﺨﺰﻥ‬
.‫ﺍﻟﻤﺆﻗﺖ‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻟﻘﺮﺍءﺓ‬
()
)
‫ﺍﻟﺴﻄﺮ‬
75
(
‫ﺗﺤﺬﻑ‬
‫ﻭﺗﻌﻴﺪ‬
ً‫ﺍ‬‫ﻋﺪﺩ‬
ً‫ﺎ‬‫ﺻﺤﻴﺤ‬
‫ﻣﻦ‬
‫ﺍﻟﻤﺨﺰﻥ‬
.‫ﺍﻟﻤﺆﻗﺖ‬
، ‫ﻟﻠﺘﺒﺴﻴﻂ‬
‫ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬ‬
‫ﺍﻟﻤﺨﺰﻥ‬
‫ﺍﻟﻤﺆﻗﺖ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﻗﺎﺉﻤﺔ‬
‫ﻣﺮﺗﺒﻄﺔ‬
)
‫ﺍﻷﺳﻄﺮ‬
49-48
(
.
‫ﺗﻢ‬
‫ﺇﻧﺸﺎء‬
‫ﺷﺮﻃﻴﻦ‬
‫ﻟﻴﺲ‬
ً‫ﺎ‬‫ﻓﺎﺭﻏ‬
‫ﻭﻟﻴﺲ‬
ً‫ﻼ‬‫ﻛﺎﻣ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﻓﻲ‬
‫ﺍﻟﺴﻄﻮﺭ‬
.56-55
‫ﺍﻟﺸﺮﻭﻁ‬
‫ﻣﺮﺗﺒﻄﺔ‬
.‫ﺑﻘﻔﻞ‬
‫ﻳﺠﺐ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻗﺒﻞ‬
‫ﺗﻄﺒﻴﻖ‬
.‫ﺍﻟﺸﺮﻁ‬
‫ﺇﺫﺍ‬
‫ﻛﻨﺖ‬
‫ﺗﺴﺘﺨﺪﻡ‬
‫ﺃﺳﺎﻟﻴﺐ‬
‫ﺍﻻﻧﺘﻈﺎﺭ‬
()
‫ﻭﺍﻹﺧﻄﺎﺭ‬
()
‫ﻹﻋﺎﺩﺓ‬
‫ﻛﺘﺎﺑﺔ‬
‫ﻫﺬﺍ‬
، ‫ﺍﻟﻤﺜﺎﻝ‬
‫ﻓﻴﺠﺐ‬
‫ﻋﻠﻴﻚ‬
‫ﺗﻌﻴﻴﻦ‬
‫ﻛﺎﺉﻨﻴﻦ‬
.‫ﻛﺸﺎﺷﺎﺕ‬
‫ﻣﻨﺘﺞ‬
‫ﺍﻟﻤﺴﺘﻬﻠﻚ‬
‫ﻳﺮﻛﺾ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
35
(
‫ﺍﺧﺘﻴﺎﺭﻱ‬
Semaphores )
‫ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
Semaphores
‫ﻟﺘﻘﻴﻴﺪ‬
‫ﻋﺪﺩ‬
‫ﺳﻼﺳﻞ‬
‫ﺍﻟﺮﺳﺎﺉﻞ‬
‫ﺍﻟﺘﻲ‬
‫ﺗﺼﻞ‬
‫ﺇﻟﻰ‬
‫ﻣﻮﺭﺩ‬
.‫ﻣﺸﺘﺮﻙ‬
‫ﻗﺒﻞ‬
‫ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰ‬
، ‫ﺍﻟﻤﻮﺭﺩ‬
‫ﻳﺠﺐ‬
‫ﺃﻥ‬
‫ﻳﺤﺼﻞ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻋﻠﻰ‬
‫ﺗﺼﺮﻳﺢ‬
‫ﻣﻦ‬
.‫ﺍﻹﺷﺎﺭﺓ‬
‫ﺑﻌﺪ‬
‫ﺍﻻﻧﺘﻬﺎء‬
‫ﻣﻦ‬
، ‫ﺍﻟﻤﻮﺭﺩ‬
‫ﻳﺠﺐ‬
‫ﺃﻥ‬
‫ﻳﻌﻴﺪ‬
‫ﻣﺆﺷﺮ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
‫ﺍﻟﺘﺼﺮﻳﺢ‬
‫ﺇﻟﻰ‬
.‫ﺍﻹﺷﺎﺭﺓ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
36
‫ﺧﻠﻖ‬
‫ﺇﺷﺎﺭﺍﺕ‬
‫ﻹﻧﺸﺎء‬
، ‫ﺇﺷﺎﺭﺓ‬
‫ﻳﺠﺐ‬
‫ﻋﻠﻴﻚ‬
‫ﺗﺤﺪﻳﺪ‬
‫ﻋﺪﺩ‬
‫ﺍﻟﺘﺼﺎﺭﻳﺢ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺳﻴﺎﺳﺔ‬
‫ﻋﺪﺍﻟﺔ‬
.‫ﺍﺧﺘﻴﺎﺭﻳﺔ‬
‫ﺗﻜﺘﺴﺐ‬
‫ﺍﻟﻤﻬﻤﺔ‬
ً‫ﺎ‬‫ﺗﺼﺮﻳﺤ‬
‫ﻋﻦ‬
‫ﻃﺮﻳﻖ‬
‫ﺍﺳﺘﺪﻋﺎء‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺍﻻﻛﺘﺴﺎﺏ‬
()
‫ﺍﻟﺨﺎﺻﺔ‬
‫ﺑﺸﺮﻛﺔ‬
semaphore
‫ﻭﺗﺤﺮﺭ‬
‫ﺍﻹﺫﻥ‬
‫ﻣﻦ‬
‫ﺧﻼﻝ‬
‫ﺍﺳﺘﺪﻋﺎء‬
‫ﻃﺮﻳﻘﺔ‬
‫ﺇﻃﻼﻕ‬
()
.‫ﺍﻟﺴﻴﻤﺎﻓﻮﺭ‬
‫ﺑﻤﺠﺮﺩ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
، ‫ﺗﺼﺮﻳﺢ‬
‫ﻳﺘﻢ‬
‫ﺗﻘﻠﻴﻞ‬
‫ﺍﻟﻌﺪﺩ‬
‫ﺍﻹﺟﻤﺎﻟﻲ‬
‫ﻟﻠﺘﺼﺎﺭﻳﺢ‬
‫ﺍﻟﻤﺘﺎﺣﺔ‬
‫ﻓﻲ‬
‫ﺇﺷﺎﺭﺓ‬
‫ﺑﻤﻘﺪﺍﺭ‬
.1
‫ﺑﻤﺠﺮﺩ‬
‫ﺇﺻﺪﺍﺭ‬
، ‫ﺍﻟﺘﺼﺮﻳﺢ‬
‫ﻳﺘﻢ‬
‫ﺯﻳﺎﺩﺓ‬
‫ﺍﻟﻌﺪﺩ‬
‫ﺍﻹﺟﻤﺎﻟﻲ‬
‫ﻟﻠﺘﺼﺎﺭﻳﺢ‬
‫ﺍﻟﻤﺘﺎﺣﺔ‬
‫ﻓﻲ‬
‫ﺍﻟﺴﻤﺎﻓﻮﺭ‬
‫ﺑﻤﻘﺪﺍﺭ‬
.1
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
37
‫ﻃﺮﻳﻖ‬
‫ﻣﺴﺪﻭﺩ‬
‫ﻓﻲ‬
‫ﺑﻌﺾ‬
، ‫ﺍﻷﺣﻴﺎﻥ‬
‫ﻳﺤﺘﺎﺝ‬
‫ﺍﺛﻨﺎﻥ‬
‫ﺃﻭ‬
‫ﺃﻛﺜﺮ‬
‫ﻣﻦ‬
‫ﺍﻟﺨﻴﻮﻁ‬
‫ﺇﻟﻰ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﻌﺪﻳﺪ‬
‫ﻣﻦ‬
‫ﺍﻟﻜﺎﺉﻨﺎﺕ‬
.‫ﺍﻟﻤﺸﺘﺮﻛﺔ‬
‫ﻫﺬﺍ‬
‫ﻳﻤﻜﻦ‬
‫ﺃﻥ‬
‫ﻳﺴﺒﺐ‬
‫ﻃﺮﻳﻖ‬
‫ﻣﺴﺪﻭﺩ‬
،
‫ﺣﻴﺚ‬
‫ﻳﺤﺘﻮﻱ‬
‫ﻛﻞ‬
‫ﺧﻴﻂ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
‫ﺃﺣﺪ‬
‫ﺍﻟﻜﺎﺉﻨﺎﺕ‬
‫ﻭﻳﻨﺘﻈﺮ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﻜﺎﺉﻦ‬
.‫ﺍﻵﺧﺮ‬
‫ﺿﻊ‬
‫ﻓﻲ‬
‫ﺍﻋﺘﺒﺎﺭﻙ‬
‫ﺍﻟﺴﻴﻨﺎﺭﻳﻮ‬
‫ﻣﻊ‬
‫ﺧﻴﻄﻴﻦ‬
.‫ﻭﻛﺎﺉﻨﻴﻦ‬
‫ﺣﺼﻞ‬
‫ﻣﺆﺷﺮ‬
‫ﺗﺮﺍﺑﻂ‬
1
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
object1
‫ﻭ‬
2
Thread
‫ﺣﺼﻞ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
object2
.
‫ﺍﻵﻥ‬
‫ﺍﻟﺨﻴﻂ‬
1
‫ﻳﻨﺘﻈﺮ‬
‫ﺍﻟﻘﻔﻞ‬
‫ﻋﻠﻰ‬
object2
‫ﻭ‬
2
Thread
‫ﻟﻠﻘﻔﻞ‬
‫ﻋﻠﻰ‬
object1
.
‫ﻳﻨﺘﻈﺮ‬
‫ﺍﻟﺨﻴﻄﺎﻥ‬
‫ﺣﺘﻰ‬
‫ﻳﺘﻢ‬
‫ﺗﺤﺮﻳﺮﻫﻤﺎ‬
‫ﻣﻦ‬
‫ﺃﺟﻞ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
، ‫ﺍﻟﻘﻔﻞ‬
‫ﻭﻻ‬
‫ﻳﻤﻜﻦ‬
‫ﻷﻱ‬
‫ﻣﻨﻬﻤﺎ‬
‫ﺍﻻﺳﺘﻤﺮﺍﺭ‬
‫ﻓﻲ‬
.‫ﺍﻟﺘﺸﻐﻴﻞ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
38
‫ﻣﻨﻊ‬
‫ﺍﻟﺠﻤﻮﺩ‬
‫ﻳﻤﻜﻦ‬
‫ﺗﺠﻨﺐ‬
‫ﺣﺎﻟﺔ‬
‫ﺍﻟﺠﻤﻮﺩ‬
‫ﺑﺴﻬﻮﻟﺔ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺗﻘﻨﻴﺔ‬
‫ﺑﺴﻴﻄﺔ‬
‫ُﺮﻑ‬‫ﻌ‬‫ﺗ‬
‫ﺑﺎﺳﻢ‬
‫ﻃﻠﺐ‬
.‫ﺍﻟﻤﻮﺍﺭﺩ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﻫﺬﻩ‬
، ‫ﺍﻟﺘﻘﻨﻴﺔ‬
‫ﻳﻤﻜﻨﻚ‬
‫ﺗﻌﻴﻴﻦ‬
‫ﻃﻠﺐ‬
‫ﻟﺠﻤﻴﻊ‬
‫ﺍﻟﻜﺎﺉﻨﺎﺕ‬
‫ﺍﻟﺘﻲ‬
‫ﻳﺠﺐ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﺃﻗﻔﺎﻟﻬﺎ‬
‫ﻭﺍﻟﺘﺄﻛﺪ‬
‫ﻣﻦ‬
‫ﺃﻥ‬
‫ﻛﻞ‬
‫ﺧﻴﻂ‬
‫ﻳﻜﺘﺴﺐ‬
‫ﺍﻷﻗﻔﺎﻝ‬
‫ﺑﻬﺬﺍ‬
.‫ﺍﻟﺘﺮﺗﻴﺐ‬
‫ﻋﻠﻰ‬
‫ﺳﺒﻴﻞ‬
، ‫ﺍﻟﻤﺜﺎﻝ‬
‫ﺍﻓﺘﺮﺽ‬
‫ﺃﻧﻪ‬
‫ﺗﻢ‬
‫ﺗﺮﺗﻴﺐ‬
‫ﺍﻟﻜﺎﺉﻨﺎﺕ‬
‫ﻋﻠﻰ‬
‫ﺃﻧﻬﺎ‬
object1
‫ﻭ‬
object2
.
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺗﻘﻨﻴﺔ‬
‫ﺗﺮﺗﻴﺐ‬
، ‫ﺍﻟﻤﻮﺍﺭﺩ‬
‫ﻳﺠﺐ‬
‫ﺃﻥ‬
‫ﻳﺤﺼﻞ‬
‫ﻣﺆﺷﺮ‬
‫ﺍﻟﺘﺮﺍﺑﻂ‬
2
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
object1
،ً ‫ﺃﻭﻻ‬
‫ﺛﻢ‬
‫ﻋﻠﻰ‬
object2
.
‫ﺑﻤﺠﺮﺩ‬
‫ﺣﺼﻮﻝ‬
1
Thread
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
object1
،
‫ﻳﺠﺐ‬
‫ﻋﻠﻰ‬
2
Thread
‫ﺍﻧﺘﻈﺎﺭ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
object1
.
‫ﻟﺬﺍ‬
‫ﻓﺈﻥ‬
1
Thread
‫ﺳﻴﻜﻮﻥ‬
ً‫ﺍ‬‫ﻗﺎﺩﺭ‬
‫ﻋﻠﻰ‬
‫ﺍﻟﺤﺼﻮﻝ‬
‫ﻋﻠﻰ‬
‫ﻗﻔﻞ‬
‫ﻋﻠﻰ‬
object2
‫ﻭﻟﻦ‬
‫ﻳﺤﺪﺙ‬
‫ﺃﻱ‬
.‫ﺗﻮﻗﻒ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
39
‫ﺍﻟﺪﻭﻝ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻳﻤﻜﻦ‬
‫ﺃﻥ‬
‫ﻳﻜﻮﻥ‬
‫ﺍﻟﺨﻴﻂ‬
‫ﻓﻲ‬
‫ﻭﺍﺣﺪﺓ‬
‫ﻣﻦ‬
‫ﺧﻤﺲ‬
:‫ﺣﺎﻻﺕ‬
‫ﺟﺪﻳﺪ‬
‫ﺃﻭ‬
‫ﺟﺎﻫﺰ‬
‫ﺃﻭ‬
‫ﻗﻴﺪ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﺃﻭ‬
‫ﻣﺤﻈﻮﺭ‬
‫ﺃﻭ‬
.‫ﻣﻨﺘﻬﻲ‬
، ‫ﻟﻴﺎﻧﻎ‬
‫ﻣﻘﺪﻣﺔ‬
‫ﻓﻲ‬
‫ﺑﺮﻣﺠﺔ‬
Java
،
‫ﺍﻹﺻﺪﺍﺭ‬
، ‫ﺍﻟﻌﺎﺷﺮ‬
c)
(
Inc
،
Education
Pearson
.2013
‫ﺍﻟﺠﻤﻴﻊ‬
‫ﺣﻘﻮﻕ‬
.‫ﻣﺤﻔﻮﻇﺔ‬
40

More Related Content

Featured

How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming LanguageSimplilearn
 

Featured (20)

How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
 

2. CS424-Chapter_30 JAVA Multithreading.is.ar.pdf