001 /* 002 * @(#)ConcurrentList.java 0.1 03/05/19 003 * 004 * Copyright (c) 2003 Arno Formella and Jose B. Gonzalez Lopez. 005 * All Rights Reserved. 006 * 007 * LGPL 008 * 009 */ 010 011 /* a possible package location */ 012 // package es.uvigo.ei.cd.java.util.concurrent; 013 014 /** 015 Container class for elements in a concurrent list. 016 017 Any object even null is allowed to be the content of 018 a ConcurrentItem. 019 Besides the necessary constructors, 020 the only publically available methods can get or set the content of 021 the container. 022 023 @author Arno Formella and José B. González López 024 @version 0.1, 05/19/03 025 */ 026 public final class ConcurrentItem { 027 /** 028 The content of this item. 029 */ 030 Object element=null; 031 /** 032 The link to the subsequent item in the list. 033 */ 034 ConcurrentItem next=null; 035 /** 036 The link to the previous item in the list. 037 */ 038 ConcurrentItem previous=null; 039 /** 040 The flag which indicates whether this item as been removed already 041 by some thread. 042 */ 043 transient boolean deleted = false; 044 /** 045 The counter which counts the number of iterators currently holding this 046 item. 047 */ 048 transient int iteratorCounter = 0; 049 050 /** 051 Constructs an <it>empty</it> ConcurrentItem. 052 053 Empty means that the content of the item is null. 054 */ 055 public ConcurrentItem() { 056 } 057 058 /** 059 Constructs a ConcurrentItem containing an object. 060 061 If null is passed, the item will contain null as content. 062 063 @param element the element to put as content of the item. 064 */ 065 public ConcurrentItem(Object element) { 066 this.element=element; 067 } 068 069 /** 070 Constructs a ConcurrentItem containing an object and two links to 071 the next and previous items in a ConcurrentList. 072 073 If null is passed, the item will contain null as content. 074 @param element the element to put as content of the item. 075 @param next the item to follow this item in the ConcurrentList. 076 @param previous the item to preceed this item in the ConcurrentList. 077 */ 078 ConcurrentItem(Object element, ConcurrentItem next, ConcurrentItem previous) { 079 this.element = element; 080 this.next = next; 081 this.previous = previous; 082 } 083 084 /** 085 Changes the content of the item. 086 087 @param element the element to put as content of the item. 088 @return the old content of the item. 089 */ 090 public synchronized Object setElement(Object element) { 091 Object oldElement = this.element; 092 this.element = element; 093 return oldElement; 094 } 095 096 /** 097 Returns the content of the item. 098 099 @return the content of the item. 100 */ 101 public synchronized Object getElement() { 102 return element; 103 } 104 }