Skip to content

Commit b89dfc2

Browse files
committed
Site updated at 2013-10-02 11:44:34 UTC
1 parent 88a30ab commit b89dfc2

File tree

3 files changed

+188
-16
lines changed

3 files changed

+188
-16
lines changed

‎atom.xml

Lines changed: 93 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<title><![CDATA[Lumint's Octopress Blog]]></title>
55
<link href="http://lumint.github.io/atom.xml" rel="self"/>
66
<link href="http://lumint.github.io/"/>
7-
<updated>2013-10-02T17:27:09+08:00</updated>
7+
<updated>2013-10-02T19:43:35+08:00</updated>
88
<id>http://lumint.github.io/</id>
99
<author>
1010
<name><![CDATA[Lumint]]></name>
@@ -62,16 +62,102 @@
6262
6363
6464
<p>
65-
当一个线程进入critical section时,那么JVM是根据什么来判断该线程是否能进入呢?当编写程序设定critical section时,我们会为该critical section指定一个mutex(互斥量),而互斥量的值将决定
65+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当一个线程进入critical section时,那么JVM是根据什么来判断该线程是否能进入呢?当编写程序设定critical section时,我们会为该critical section指定一个mutex(互斥量),而互斥量的值将决定
6666
其他线程是否可以进入该Critical Section.
67-
&#8220;` Java
68-
synchronized(mutex){
69-
&#8230;
70-
}
71-
&#8220;`
67+
7268
7369
</p>
7470
71+
72+
<pre><code> synchronized(mutex){
73+
// critical section code
74+
...
75+
}
76+
</code></pre>
77+
78+
<p>
79+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Java使用上面语法可以设置Critical Section,对于互斥的代码可以写入Critical Section.如下面代码:<br/>
80+
</p>
81+
82+
83+
84+
85+
<figure class='code'><figcaption><span>ThreadSync1.java</span><a href='http://weibo.com/u/2277842353'>Weibo</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
86+
<span class='line-number'>2</span>
87+
<span class='line-number'>3</span>
88+
<span class='line-number'>4</span>
89+
<span class='line-number'>5</span>
90+
<span class='line-number'>6</span>
91+
<span class='line-number'>7</span>
92+
<span class='line-number'>8</span>
93+
<span class='line-number'>9</span>
94+
<span class='line-number'>10</span>
95+
<span class='line-number'>11</span>
96+
<span class='line-number'>12</span>
97+
<span class='line-number'>13</span>
98+
<span class='line-number'>14</span>
99+
<span class='line-number'>15</span>
100+
<span class='line-number'>16</span>
101+
<span class='line-number'>17</span>
102+
<span class='line-number'>18</span>
103+
<span class='line-number'>19</span>
104+
<span class='line-number'>20</span>
105+
<span class='line-number'>21</span>
106+
<span class='line-number'>22</span>
107+
<span class='line-number'>23</span>
108+
<span class='line-number'>24</span>
109+
<span class='line-number'>25</span>
110+
<span class='line-number'>26</span>
111+
<span class='line-number'>27</span>
112+
<span class='line-number'>28</span>
113+
<span class='line-number'>29</span>
114+
<span class='line-number'>30</span>
115+
<span class='line-number'>31</span>
116+
<span class='line-number'>32</span>
117+
<span class='line-number'>33</span>
118+
<span class='line-number'>34</span>
119+
<span class='line-number'>35</span>
120+
<span class='line-number'>36</span>
121+
<span class='line-number'>37</span>
122+
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="kp">public</span> <span class="k">class</span> <span class="nc">ThreadSync1</span> <span class="n">implements</span> <span class="no">Runnable</span><span class="p">{</span>
123+
</span><span class='line'> <span class="kp">private</span> <span class="no">Object</span> <span class="n">mutex</span><span class="p">;</span>
124+
</span><span class='line'>
125+
</span><span class='line'> <span class="kp">public</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="no">Object</span> <span class="n">mutex</span><span class="p">)</span> <span class="p">{</span>
126+
</span><span class='line'> <span class="n">this</span><span class="o">.</span><span class="n">mutex</span> <span class="o">=</span> <span class="n">mutex</span><span class="p">;</span>
127+
</span><span class='line'> <span class="p">}</span>
128+
</span><span class='line'>
129+
</span><span class='line'> <span class="kp">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">main</span><span class="p">(</span><span class="nb">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
130+
</span><span class='line'> <span class="no">Object</span> <span class="n">mutex1</span> <span class="o">=</span> <span class="kp">new</span> <span class="no">Object</span><span class="p">();</span>
131+
</span><span class='line'> <span class="no">Object</span> <span class="n">mutex2</span> <span class="o">=</span> <span class="kp">new</span> <span class="no">Object</span><span class="p">();</span>
132+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex1</span><span class="p">),</span><span class="s2">&quot;线程一&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
133+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex1</span><span class="p">),</span><span class="s2">&quot;线程二&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
134+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex1</span><span class="p">),</span><span class="s2">&quot;线程三&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
135+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex2</span><span class="p">),</span><span class="s2">&quot;线程四&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
136+
</span><span class='line'> <span class="p">}</span>
137+
</span><span class='line'>
138+
</span><span class='line'> <span class="kp">public</span> <span class="n">void</span> <span class="n">setMutex</span><span class="p">(</span><span class="no">Object</span> <span class="n">mutex</span><span class="p">)</span> <span class="p">{</span>
139+
</span><span class='line'> <span class="n">this</span><span class="o">.</span><span class="n">mutex</span> <span class="o">=</span> <span class="n">mutex</span><span class="p">;</span>
140+
</span><span class='line'> <span class="p">}</span>
141+
</span><span class='line'>
142+
</span><span class='line'> <span class="vi">@Override</span>
143+
</span><span class='line'> <span class="kp">public</span> <span class="n">void</span> <span class="n">run</span><span class="p">()</span> <span class="p">{</span>
144+
</span><span class='line'> <span class="n">synchronized</span> <span class="p">(</span><span class="n">mutex</span><span class="p">)</span> <span class="p">{</span>
145+
</span><span class='line'> <span class="no">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="no">Thread</span><span class="o">.</span><span class="n">currentThread</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&quot;进入Critical Section! 等待5秒!&quot;</span><span class="p">);</span>
146+
</span><span class='line'> <span class="n">try</span> <span class="p">{</span>
147+
</span><span class='line'> <span class="k">for</span><span class="p">(</span><span class="n">int</span> <span class="n">i</span> <span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">5</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">){</span>
148+
</span><span class='line'> <span class="no">Thread</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
149+
</span><span class='line'> <span class="no">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
150+
</span><span class='line'> <span class="p">}</span>
151+
</span><span class='line'> <span class="p">}</span> <span class="kp">catch</span> <span class="p">(</span><span class="no">InterruptedException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
152+
</span><span class='line'> <span class="n">e</span><span class="o">.</span><span class="n">printStackTrace</span><span class="p">();</span>
153+
</span><span class='line'> <span class="p">}</span>
154+
</span><span class='line'> <span class="no">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="no">Thread</span><span class="o">.</span><span class="n">currentThread</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&quot;退出Critical Section! 等待5秒!&quot;</span><span class="p">);</span>
155+
</span><span class='line'> <span class="p">}</span>
156+
</span><span class='line'>
157+
</span><span class='line'> <span class="p">}</span>
158+
</span><span class='line'> <span class="p">}</span>
159+
</span></code></pre></td></tr></table></div></figure>
160+
75161
]]></content>
76162
</entry>
77163

‎blog/2013/10/01/thread-synchronized-1/index.html

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,102 @@ <h3>线程</h3>
135135

136136

137137
<p>
138-
当一个线程进入critical section时,那么JVM是根据什么来判断该线程是否能进入呢?当编写程序设定critical section时,我们会为该critical section指定一个mutex(互斥量),而互斥量的值将决定
138+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当一个线程进入critical section时,那么JVM是根据什么来判断该线程是否能进入呢?当编写程序设定critical section时,我们会为该critical section指定一个mutex(互斥量),而互斥量的值将决定
139139
其他线程是否可以进入该Critical Section.
140-
&#8220;` Java
141-
synchronized(mutex){
142-
&#8230;
143-
}
144-
&#8220;`
140+
145141

146142
</p>
147143

144+
145+
<pre><code> synchronized(mutex){
146+
// critical section code
147+
...
148+
}
149+
</code></pre>
150+
151+
<p>
152+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Java使用上面语法可以设置Critical Section,对于互斥的代码可以写入Critical Section.如下面代码:<br/>
153+
</p>
154+
155+
156+
157+
158+
<figure class='code'><figcaption><span>ThreadSync1.java</span><a href='http://weibo.com/u/2277842353'>Weibo</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
159+
<span class='line-number'>2</span>
160+
<span class='line-number'>3</span>
161+
<span class='line-number'>4</span>
162+
<span class='line-number'>5</span>
163+
<span class='line-number'>6</span>
164+
<span class='line-number'>7</span>
165+
<span class='line-number'>8</span>
166+
<span class='line-number'>9</span>
167+
<span class='line-number'>10</span>
168+
<span class='line-number'>11</span>
169+
<span class='line-number'>12</span>
170+
<span class='line-number'>13</span>
171+
<span class='line-number'>14</span>
172+
<span class='line-number'>15</span>
173+
<span class='line-number'>16</span>
174+
<span class='line-number'>17</span>
175+
<span class='line-number'>18</span>
176+
<span class='line-number'>19</span>
177+
<span class='line-number'>20</span>
178+
<span class='line-number'>21</span>
179+
<span class='line-number'>22</span>
180+
<span class='line-number'>23</span>
181+
<span class='line-number'>24</span>
182+
<span class='line-number'>25</span>
183+
<span class='line-number'>26</span>
184+
<span class='line-number'>27</span>
185+
<span class='line-number'>28</span>
186+
<span class='line-number'>29</span>
187+
<span class='line-number'>30</span>
188+
<span class='line-number'>31</span>
189+
<span class='line-number'>32</span>
190+
<span class='line-number'>33</span>
191+
<span class='line-number'>34</span>
192+
<span class='line-number'>35</span>
193+
<span class='line-number'>36</span>
194+
<span class='line-number'>37</span>
195+
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="kp">public</span> <span class="k">class</span> <span class="nc">ThreadSync1</span> <span class="n">implements</span> <span class="no">Runnable</span><span class="p">{</span>
196+
</span><span class='line'> <span class="kp">private</span> <span class="no">Object</span> <span class="n">mutex</span><span class="p">;</span>
197+
</span><span class='line'>
198+
</span><span class='line'> <span class="kp">public</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="no">Object</span> <span class="n">mutex</span><span class="p">)</span> <span class="p">{</span>
199+
</span><span class='line'> <span class="n">this</span><span class="o">.</span><span class="n">mutex</span> <span class="o">=</span> <span class="n">mutex</span><span class="p">;</span>
200+
</span><span class='line'> <span class="p">}</span>
201+
</span><span class='line'>
202+
</span><span class='line'> <span class="kp">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">main</span><span class="p">(</span><span class="nb">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
203+
</span><span class='line'> <span class="no">Object</span> <span class="n">mutex1</span> <span class="o">=</span> <span class="kp">new</span> <span class="no">Object</span><span class="p">();</span>
204+
</span><span class='line'> <span class="no">Object</span> <span class="n">mutex2</span> <span class="o">=</span> <span class="kp">new</span> <span class="no">Object</span><span class="p">();</span>
205+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex1</span><span class="p">),</span><span class="s2">&quot;线程一&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
206+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex1</span><span class="p">),</span><span class="s2">&quot;线程二&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
207+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex1</span><span class="p">),</span><span class="s2">&quot;线程三&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
208+
</span><span class='line'> <span class="kp">new</span> <span class="no">Thread</span><span class="p">(</span><span class="kp">new</span> <span class="no">ThreadSync1</span><span class="p">(</span><span class="n">mutex2</span><span class="p">),</span><span class="s2">&quot;线程四&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
209+
</span><span class='line'> <span class="p">}</span>
210+
</span><span class='line'>
211+
</span><span class='line'> <span class="kp">public</span> <span class="n">void</span> <span class="n">setMutex</span><span class="p">(</span><span class="no">Object</span> <span class="n">mutex</span><span class="p">)</span> <span class="p">{</span>
212+
</span><span class='line'> <span class="n">this</span><span class="o">.</span><span class="n">mutex</span> <span class="o">=</span> <span class="n">mutex</span><span class="p">;</span>
213+
</span><span class='line'> <span class="p">}</span>
214+
</span><span class='line'>
215+
</span><span class='line'> <span class="vi">@Override</span>
216+
</span><span class='line'> <span class="kp">public</span> <span class="n">void</span> <span class="n">run</span><span class="p">()</span> <span class="p">{</span>
217+
</span><span class='line'> <span class="n">synchronized</span> <span class="p">(</span><span class="n">mutex</span><span class="p">)</span> <span class="p">{</span>
218+
</span><span class='line'> <span class="no">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="no">Thread</span><span class="o">.</span><span class="n">currentThread</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&quot;进入Critical Section! 等待5秒!&quot;</span><span class="p">);</span>
219+
</span><span class='line'> <span class="n">try</span> <span class="p">{</span>
220+
</span><span class='line'> <span class="k">for</span><span class="p">(</span><span class="n">int</span> <span class="n">i</span> <span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">5</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">){</span>
221+
</span><span class='line'> <span class="no">Thread</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
222+
</span><span class='line'> <span class="no">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
223+
</span><span class='line'> <span class="p">}</span>
224+
</span><span class='line'> <span class="p">}</span> <span class="kp">catch</span> <span class="p">(</span><span class="no">InterruptedException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
225+
</span><span class='line'> <span class="n">e</span><span class="o">.</span><span class="n">printStackTrace</span><span class="p">();</span>
226+
</span><span class='line'> <span class="p">}</span>
227+
</span><span class='line'> <span class="no">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="no">Thread</span><span class="o">.</span><span class="n">currentThread</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&quot;退出Critical Section! 等待5秒!&quot;</span><span class="p">);</span>
228+
</span><span class='line'> <span class="p">}</span>
229+
</span><span class='line'>
230+
</span><span class='line'> <span class="p">}</span>
231+
</span><span class='line'> <span class="p">}</span>
232+
</span></code></pre></td></tr></table></div></figure>
233+
148234
</div>
149235

150236

0 commit comments

Comments
 (0)