0

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がi == 10まで増分メソッドのロックを保持し、スレッド2が増分メソッドにアクセスしないようにします。出来ますか!??

4

1 に答える 1

0

メソッド修飾子であることに加えて、synchronized任意のスタンドアロン コード ブロックで使用できます。例えば:

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

あなたの場合、ループを 2 つのループに分割し、最初のループをsynchronizedブロック内に配置できます。

于 2012-12-23T19:26:19.647 に答える