Counter.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapreduce;
  19. import java.io.IOException;
  20. import java.io.DataInput;
  21. import java.io.DataOutput;
  22. import org.apache.hadoop.io.Text;
  23. import org.apache.hadoop.io.Writable;
  24. import org.apache.hadoop.io.WritableUtils;
  25. /**
  26.  * A named counter that tracks the progress of a map/reduce job.
  27.  * 
  28.  * <p><code>Counters</code> represent global counters, defined either by the 
  29.  * Map-Reduce framework or applications. Each <code>Counter</code> is named by
  30.  * an {@link Enum} and has a long for the value.</p>
  31.  * 
  32.  * <p><code>Counters</code> are bunched into Groups, each comprising of
  33.  * counters from a particular <code>Enum</code> class. 
  34.  */
  35. public class Counter implements Writable {
  36.   private String name;
  37.   private String displayName;
  38.   private long value = 0;
  39.     
  40.   protected Counter() { 
  41.   }
  42.   protected Counter(String name, String displayName) {
  43.     this.name = name;
  44.     this.displayName = displayName;
  45.   }
  46.   
  47.   @Deprecated
  48.   protected synchronized void setDisplayName(String displayName) {
  49.     this.displayName = displayName;
  50.   }
  51.     
  52.   /**
  53.    * Read the binary representation of the counter
  54.    */
  55.   @Override
  56.   public synchronized void readFields(DataInput in) throws IOException {
  57.     name = Text.readString(in);
  58.     if (in.readBoolean()) {
  59.       displayName = Text.readString(in);
  60.     } else {
  61.       displayName = name;
  62.     }
  63.     value = WritableUtils.readVLong(in);
  64.   }
  65.     
  66.   /**
  67.    * Write the binary representation of the counter
  68.    */
  69.   @Override
  70.   public synchronized void write(DataOutput out) throws IOException {
  71.     Text.writeString(out, name);
  72.     boolean distinctDisplayName = ! name.equals(displayName);
  73.     out.writeBoolean(distinctDisplayName);
  74.     if (distinctDisplayName) {
  75.       Text.writeString(out, displayName);
  76.     }
  77.     WritableUtils.writeVLong(out, value);
  78.   }
  79.   public synchronized String getName() {
  80.     return name;
  81.   }
  82.   /**
  83.    * Get the name of the counter.
  84.    * @return the user facing name of the counter
  85.    */
  86.   public synchronized String getDisplayName() {
  87.     return displayName;
  88.   }
  89.     
  90.   /**
  91.    * What is the current value of this counter?
  92.    * @return the current value
  93.    */
  94.   public synchronized long getValue() {
  95.     return value;
  96.   }
  97.     
  98.   /**
  99.    * Increment this counter by the given value
  100.    * @param incr the value to increase this counter by
  101.    */
  102.   public synchronized void increment(long incr) {
  103.     value += incr;
  104.   }
  105.   @Override
  106.   public synchronized boolean equals(Object genericRight) {
  107.     if (genericRight instanceof Counter) {
  108.       synchronized (genericRight) {
  109.         Counter right = (Counter) genericRight;
  110.         return name.equals(right.name) && 
  111.                displayName.equals(right.displayName) &&
  112.                value == right.value;
  113.       }
  114.     }
  115.     return false;
  116.   }
  117.   
  118.   @Override
  119.   public synchronized int hashCode() {
  120.     return name.hashCode() + displayName.hashCode();
  121.   }
  122. }