public class NoVisibility {
private static boolean ready;
private static int number;
public static class ReaderThread extends Thread {
public void run(){
while(!ready)
Thread.yield();
System.out.println(number);
}
}
public static void main(String []args) {
new ReaderThread( ).start();
number = 42;
ready = true;
}
} volatile boolean asleep;
...
while(!asleep)
countSomeSheep(); public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(
new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
} );
}
} public class SafeListener {
private final EventListener listner;
private SafeListener() {
listner = new EventListener() {
public void onEvent(Event e) {
doSomething( e );
}
};
}
public static SafeListener newInstance( EventSource source ) {
SafeListener safe = new SafeListener( );
souce.registerListener( safa.listener );
return safe;
}
}private static ThreadLocal<Connection> connectionHolder
= new ThreadLocal<Connnection>( ) {
public Connection initialValue( ) {
return DriverManager.getConnection(DB_URL);
} ;
public static Connection getConnection( ) {
return connectionHolder.get( );
}
}@Immutable
class OneValueCache {
private final BigInteger lastNumber;
private final BigInteger[] lastFactors;
public OneValueCache(BigInteger i, BigInteger[] factors) {
lastNumber = i;
lastFactors = factors;
}
public BigInteger[] getFactors( BigInteger i ) {
if(lastNumber == null || !lastNumber.equals(i)) {
return null;
} else {
return Arrays.copyOf(lastFactors, lastFactors.length );
}
}
}public class VolatileCachedFactorizer implements Servlet {
private volatile OneValueCache cache = new OneValueCache(null, null);
public void service(ServletRequest req, ServletResponse resp) {
BigInteger i = extractFromRequest(req);
BigInteger[] factors = cache.getFactors( i );
if(factors == null) {
factors = factor(i);
cache = new OneValueCache(i, factors);
}
encodeIntoResponse(resp, factors);
}
}原文地址:http://blog.csdn.net/troy__/article/details/38796119