2012-12-23 84 views
0

在java中,一個線程可以在一段指定的時間間隔內保持一個對象嗎?例如,假設我有以下代碼:java同步持有一個指定時間間隔的對象

package test; 

class Thread1 implements Runnable { 
    private int balance; 
    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
    for(int i=0;i<50;i++) 
    { 
     increment(); 

     System.out.println("The bal by "+Thread.currentThread().getName()+" "+balance); 
    } 
    } 

    public synchronized void increment() 
    { 
     int i=balance; 
     balance =i+1; 
    } 


} 

主要類:

package test; 

public class MainC { 
public static void main(String args[]) 
{ 
    Thread1 job=new Thread1(); 
    Thread a =new Thread(job); 
    Thread b=new Thread(job); 
    a.setName("Thread a"); 
    b.setName("Thread b"); 
    a.start(); 
    b.start(); 

} 
} 

現在,我想線程1持有該鎖到增量法,直到我== 10和Don」 t想讓線程2訪問遞增方法!可能嗎!??

+0

i == 10後你想要發生什麼? –

+0

i == 10之後,線程b應該接管訪問由「..」更新的「balance」的值,然後在i == 25之後,a應該接管由b更新的「balance」的值! – Chandeep

+0

你有一個通用規則還是隻有10和25個任意? –

回答

0

除了作爲方法修飾符之外,​​還可以用於任何獨立的代碼塊。例如:

synchronized (this) { 
    doStuff(); 
    doMoreStuff(); 
} 

在你的情況,您可以將循環分成兩個迴路,並把第一循環中​​塊內。

+0

你是不是想把'doMoreStuff()'放在'synchronized'塊之外? – yair

+0

當你像這樣序列化處理時,你甚至不需要同步。 (當然,OP的處理聽起來像是它應該被序列化。) –