b703f48ed5716a01422809266b0767053f3f2ca5
[utils] /
1 /*
2  * Copyright 2006 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.socketproxy; 
17
18 public class Barrier {
19
20     private int _countLeft;
21
22     public Barrier( int aCount ) {
23         _countLeft = aCount;
24     }
25
26     public synchronized void block( ) {
27         _countLeft--;
28         if ( _countLeft < 0 ) {
29             throw new IllegalStateException(
30                     "Barrier count became negative, programming error" );
31         }
32         notifyAll( );
33         while ( _countLeft > 0 ) {
34             waitUninterruptable( );
35         }
36     }
37
38     private void waitUninterruptable( ) {
39         try {
40             wait( );
41         } catch ( InterruptedException e ) {
42             // ignore.
43         }
44     }
45
46 }