- /* package whatever; // don't place package name! */ 
-   
- import java.util.ArrayList; 
- import java.util.List; 
-   
- class Ideone { 
- 	public static void-  main (String[]-  args ) {
 
- 		new Ideone(); 
- 	} 
-   
- 	public Ideone() { 
- 		DummyBuffer<String> buf = new DummyBuffer<String>(new ArrayList<String>(), 5); 
-   
-   
- 		cons.run(); 
- 		prod.run(); 
-   
- 	} 
-   
- 	private class-  Consumer  implements Runnable {
 
- 		private DummyBuffer<String> buf; 
-   
- 		public Consumer(DummyBuffer<String> buf) { 
- 			this.buf = buf; 
- 		} 
-   
- 		@Override 
- 		public void run() { 
- 			buf.take(); 
- 		} 
- 	} 
- 	private class-  Producer  implements Runnable {
 
- 		private DummyBuffer<String> buf; 
-   
- 		public Producer(DummyBuffer<String> buf) { 
- 			this.buf = buf; 
- 		} 
-   
- 		@Override 
- 		public void run() { 
- 			System- . out- . println("Producer there...");
 
- 			buf.put("Hello World!"); 
- 		} 
- 	} 
-   
- 	private class DummyBuffer<T> { 
- 		private final int SIZE; 
- 		private List<T> data; 
-   
- 		public DummyBuffer(List<T> sharedData, int maxSize) { 
- 			SIZE = maxSize; 
- 			data = sharedData; 
- 		} 
-   
- 		public synchronized T take() { 
- 			while (data.isEmpty()) { 
- 				try { 
- 					System- . out- . println("waiting... for taking");
 
- 					wait(); 
- 				} 
- 					// Do nothing 
- 				} 
- 			} 
- 			T item = data.remove(data.size() - 1); 
-   
- 			notifyAll(); 
-   
- 			System- . out- . println("Removed item: " +-  item );
 
- 			return item; 
- 		} 
-   
- 		public synchronized void put(T item) { 
- 			while (data.size() >= SIZE) { 
- 				try { 
- 					wait(); 
- 				} 
- 					// Do nothing 
- 				} 
- 			} 
- 			data.add(item); 
-   
- 			System- . out- . println("notified");
 
- 			notifyAll(); 
-   
- 			System- . out- . println("Put item: " +-  item );
 
- 		} 
- 	} 
- } 
				LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCmNsYXNzIElkZW9uZSB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJbmV3IElkZW9uZSgpOwoJfQoJCglwdWJsaWMgSWRlb25lKCkgewoJCUR1bW15QnVmZmVyPFN0cmluZz4gYnVmID0gbmV3IER1bW15QnVmZmVyPFN0cmluZz4obmV3IEFycmF5TGlzdDxTdHJpbmc+KCksIDUpOwoJCQoJCVRocmVhZCBwcm9kID0gbmV3IFRocmVhZChuZXcgUHJvZHVjZXIoYnVmKSk7CgkJVGhyZWFkIGNvbnMgPSBuZXcgVGhyZWFkKG5ldyBDb25zdW1lcihidWYpKTsKCQkKCQljb25zLnJ1bigpOwoJCXByb2QucnVuKCk7CgkJCQkKCX0KCQoJcHJpdmF0ZSBjbGFzcyBDb25zdW1lciBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKCQlwcml2YXRlIER1bW15QnVmZmVyPFN0cmluZz4gYnVmOwoJCQoJCXB1YmxpYyBDb25zdW1lcihEdW1teUJ1ZmZlcjxTdHJpbmc+IGJ1ZikgewoJCQl0aGlzLmJ1ZiA9IGJ1ZjsKCQl9CgkJCgkJQE92ZXJyaWRlCgkJcHVibGljIHZvaWQgcnVuKCkgewoJCQlidWYudGFrZSgpOwoJCX0KCX0KCXByaXZhdGUgY2xhc3MgUHJvZHVjZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7CgkJcHJpdmF0ZSBEdW1teUJ1ZmZlcjxTdHJpbmc+IGJ1ZjsKCQkKCQlwdWJsaWMgUHJvZHVjZXIoRHVtbXlCdWZmZXI8U3RyaW5nPiBidWYpIHsKCQkJdGhpcy5idWYgPSBidWY7CgkJfQoJCQoJCUBPdmVycmlkZQoJCXB1YmxpYyB2b2lkIHJ1bigpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9kdWNlciB0aGVyZS4uLiIpOwoJCQlidWYucHV0KCJIZWxsbyBXb3JsZCEiKTsKCQl9Cgl9CgkKCXByaXZhdGUgY2xhc3MgRHVtbXlCdWZmZXI8VD4gewoJCXByaXZhdGUgZmluYWwgaW50IFNJWkU7CgkJcHJpdmF0ZSBMaXN0PFQ+IGRhdGE7CgkJCgkJcHVibGljIER1bW15QnVmZmVyKExpc3Q8VD4gc2hhcmVkRGF0YSwgaW50IG1heFNpemUpIHsKCQkJU0laRSA9IG1heFNpemU7CgkJCWRhdGEgPSBzaGFyZWREYXRhOwoJCX0KCQkKCQlwdWJsaWMgc3luY2hyb25pemVkIFQgdGFrZSgpIHsKCQkJd2hpbGUgKGRhdGEuaXNFbXB0eSgpKSB7CgkJCQl0cnkgewoJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigid2FpdGluZy4uLiBmb3IgdGFraW5nIik7CgkJCQkJd2FpdCgpOwoJCQkJfQoJCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKCQkJCQkvLyBEbyBub3RoaW5nCgkJCQl9CgkJCX0KCQkJVCBpdGVtID0gZGF0YS5yZW1vdmUoZGF0YS5zaXplKCkgLSAxKTsKCQkJCgkJCW5vdGlmeUFsbCgpOwoJCQkKCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdmVkIGl0ZW06ICIgKyBpdGVtKTsKCQkJcmV0dXJuIGl0ZW07CgkJfQoJCQoJCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBwdXQoVCBpdGVtKSB7CgkJCXdoaWxlIChkYXRhLnNpemUoKSA+PSBTSVpFKSB7CgkJCQl0cnkgewoJCQkJCXdhaXQoKTsKCQkJCX0KCQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CgkJCQkJLy8gRG8gbm90aGluZwoJCQkJfQoJCQl9CgkJCWRhdGEuYWRkKGl0ZW0pOwoJCQkKCQkJU3lzdGVtLm91dC5wcmludGxuKCJub3RpZmllZCIpOwoJCQlub3RpZnlBbGwoKTsKCQkJCgkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHV0IGl0ZW06ICIgKyBpdGVtKTsKCQl9Cgl9Cn0=