Java多線程同步具體實(shí)例講解
Java多線程同步在語言應(yīng)用中十分的關(guān)鍵,我們在不斷的學(xué)習(xí)中就會(huì)注意到這一點(diǎn)。下面我們就詳細(xì)的看看如何才能更好的進(jìn)行Java多線程同步的應(yīng)用。下面的代碼會(huì)對你有所幫助。
一個(gè)很重要的關(guān)鍵字就是線程同步synchronized,下面的火車票的售票系統(tǒng)的模型:同步分
同步塊和同步方法:
- class SellThread implements Runnable
- {
- int tickets=100;
- Object obj=new Object();
- boolean b=false;
- public void run()
- {
- if(b==false)
- {
- while(true)
- sell();
- }
- else
- {
- while(true)
- {
- synchronized(obj)
- {
- try
- {
- Thread.sleep(10);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- synchronized(this)
- {
- if(tickets>0)
- {
- System.out.println
- ("obj:"+Thread.currentThread().getName()+
- "
- sell tickets:"+tickets);
- tickets--;
- }
- }
- }
- }
- }
- }
- public synchronized void sell()
- {
- synchronized(obj)
- {
- if(tickets>0)
- {
- try
- {
- Thread.sleep(10);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- System.out.println("sell():"+Thread.currentThread
- ().getName()+
- " sell tickets:"+tickets);
- tickets--;
- }
- }
- }
- }
通過網(wǎng)上資料得知:同步塊和同步方法其實(shí)本質(zhì)是一樣的:都是對對象枷鎖。Java多線程同步中每個(gè)對象都有一個(gè)監(jiān)視器----鎖,同步方法是利用this所代表的對象的鎖,同步塊利用的是同步塊對象本身的鎖。
【編輯推薦】