View Javadoc

1   /***
2    *  Copyright 2003-2010 Terracotta, Inc.
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  
17  package net.sf.ehcache.constructs.nonstop;
18  
19  import org.slf4j.Logger;
20  import org.slf4j.LoggerFactory;
21  
22  import java.util.concurrent.Callable;
23  
24  public class BlockingCallable implements Callable<Void> {
25  
26      private static final Logger LOG = LoggerFactory.getLogger(BlockingCallable.class);
27  
28      private final boolean logExecution;
29      private final Object monitor = new Object();
30      private volatile boolean blocked = true;
31  
32      public BlockingCallable() {
33          this(false);
34      }
35  
36      public BlockingCallable(boolean logExecution) {
37          this.logExecution = logExecution;
38      }
39  
40      public Void call() throws Exception {
41          if (logExecution) {
42              LOG.info("inside blocking callable");
43          }
44          while (blocked) {
45              synchronized (monitor) {
46                  monitor.wait();
47              }
48          }
49          return null;
50      }
51  
52      public void unblock() {
53          synchronized (monitor) {
54              blocked = false;
55              monitor.notifyAll();
56          }
57      }
58  
59  }