|  |  | 
 |  |  |  | 
 |  |  |         public NewsQueue(Class<T> cls, int capacity) { | 
 |  |  |             this.cls = cls; | 
 |  |  |             arr = (T[]) Array.newInstance(cls, capacity); | 
 |  |  |             this.arr = (T[]) Array.newInstance(cls, capacity); | 
 |  |  |             this.capacity = capacity; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public synchronized boolean offer(T t) { | 
 |  |  |             if (this.tail == this.capacity) { | 
 |  |  |                 this.peek(); | 
 |  |  |             } | 
 |  |  |             this.reform(); | 
 |  |  |             this.arr[this.tail] = t; | 
 |  |  |             this.tail ++; | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public synchronized boolean put(T t) { | 
 |  |  |             if (this.tail == this.capacity) { | 
 |  |  |                 return false; | 
 |  |  |             } else { | 
 |  |  |                 for (int i = this.head; i < this.tail; i++) { | 
 |  |  |                     this.arr[i-this.head] = this.arr[i]; | 
 |  |  |                 } | 
 |  |  |                 this.tail -= this.head; | 
 |  |  |                 this.head = 0; | 
 |  |  |                 this.reform(); | 
 |  |  |             } | 
 |  |  |             this.arr[this.tail] = t; | 
 |  |  |             this.tail ++; | 
 |  |  | 
 |  |  |             } | 
 |  |  |             T t = this.arr[this.head]; | 
 |  |  |             this.head ++; | 
 |  |  |             this.reform(); | 
 |  |  |             return t; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         private void reform() { | 
 |  |  |             for (int i = this.head; i < this.tail; i++) { | 
 |  |  |                 this.arr[i-this.head] = this.arr[i]; | 
 |  |  |             } | 
 |  |  |             this.tail -= this.head; | 
 |  |  |             this.head = 0; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public synchronized int size() { | 
 |  |  |             return this.tail - this.head; | 
 |  |  |         } |