import java.lang.* ;
import java.lang.ref.WeakReference ;
class Ideone
{
static class IntArray
{
WeakReference< Object> self;
int [ ] array1;
int size;
{
private int index;
private int value;
Setter( int index, int value)
{
this .index = index;
this .value = value;
}
@Override
public void run( )
{
if ( index < 0 ) index = - index;
if ( index >= size) index = index % size;
synchronized ( self)
{
int [ ] tmp = array1.clone ( ) ;
tmp[ index] = value;
array1 = tmp;
}
}
}
IntArray( int size)
{
this .size = size;
array1 = new int [ size] ;
self = new WeakReference< Object> ( this ) ;
}
public void setValue( int index, int value)
{
thread.start ( ) ;
}
public int getValue( int index)
{
return array1[ index] ;
}
public int length( )
{
return size;
}
}
{
IntArray array = new IntArray( 10 ) ;
for ( int i = 0 ; i < 10 ; ++ i)
{
array.setValue ( i, i * 10 ) ;
array.setValue ( i, i * 20 ) ;
}
for ( int i = 0 ; i < 10 ; ++ i)
{
array.setValue ( i, i + i + 5 ) ;
}
for ( int i = 0 ; i < 10 ; ++ i)
{
System .
out .
println ( "1) " + i
+ ": = " + array.
getValue ( i
) ) ; }
}
}
aW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwoKY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBjbGFzcyBJbnRBcnJheQoJewoJCVdlYWtSZWZlcmVuY2U8T2JqZWN0PiBzZWxmOwoJCWludFtdIGFycmF5MTsKCQlpbnQgc2l6ZTsKCQkKCQljbGFzcyBTZXR0ZXIgaW1wbGVtZW50cyBSdW5uYWJsZQoJCXsKCQkJcHJpdmF0ZSBpbnQgaW5kZXg7CgkJCXByaXZhdGUgaW50IHZhbHVlOwoJCQlTZXR0ZXIoaW50IGluZGV4LCBpbnQgdmFsdWUpCgkJCXsKCQkJCXRoaXMuaW5kZXggPSBpbmRleDsKCQkJCXRoaXMudmFsdWUgPSB2YWx1ZTsKCQkJfQoJCQlAT3ZlcnJpZGUKCQkJcHVibGljIHZvaWQgcnVuKCkKCQkJewoJCQkJaWYgKGluZGV4IDwgMCkgaW5kZXggPSAtaW5kZXg7CgkJCQlpZiAoaW5kZXggPj0gc2l6ZSkgaW5kZXggPSBpbmRleCAlIHNpemU7CgkJCQlzeW5jaHJvbml6ZWQgKHNlbGYpCgkJCQl7CgkJCQkJaW50W10gdG1wID0gYXJyYXkxLmNsb25lKCk7CgkJCQkJdG1wW2luZGV4XSA9IHZhbHVlOwoJCQkJCWFycmF5MSA9IHRtcDsKCQkJCX0KCQkJfQoJCX0KCQkKCQlJbnRBcnJheShpbnQgc2l6ZSkgCgkJewoJCQl0aGlzLnNpemUgPSBzaXplOwoJCQlhcnJheTEgPSBuZXcgaW50W3NpemVdOwoJCQlzZWxmID0gbmV3IFdlYWtSZWZlcmVuY2U8T2JqZWN0Pih0aGlzKTsKCQl9CgkJCgkJcHVibGljIHZvaWQgc2V0VmFsdWUoaW50IGluZGV4LCBpbnQgdmFsdWUpCgkJewoJCQlUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZChuZXcgU2V0dGVyKGluZGV4LCB2YWx1ZSkpOwoJCQl0aHJlYWQuc3RhcnQoKTsKCQl9CgkJCgkJcHVibGljIGludCBnZXRWYWx1ZShpbnQgaW5kZXgpCgkJewoJCQlyZXR1cm4gYXJyYXkxW2luZGV4XTsKCQl9CgkJCgkJcHVibGljIGludCBsZW5ndGgoKQoJCXsKCQkJcmV0dXJuIHNpemU7CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlJbnRBcnJheSBhcnJheSA9IG5ldyBJbnRBcnJheSgxMCk7CgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKQoJCXsKCQkJYXJyYXkuc2V0VmFsdWUoaSwgaSAqIDEwKTsKCQkJYXJyYXkuc2V0VmFsdWUoaSwgaSAqIDIwKTsKCQl9CgoJCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKCQl7CgkJCWFycmF5LnNldFZhbHVlKGksIGkgKyBpICsgNSk7CgkJfQoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKCQl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiMSkgIiArIGkgKyAiOiA9ICIgKyBhcnJheS5nZXRWYWx1ZShpKSk7CgkJfQoJfQp9