package ThreadLocal;
public class BusinessService {
public void businessMethod() {
// get the context from thread local
Context context = MyThreadLocal.get();
System.out.println(context.getTransactionId());
}
}
package ThreadLocal;
public class Context {
/**
* @return the transactionId
*/
public String getTransactionId() {
return transactionId;
}
/**
* @param transactionId the transactionId to set
*/
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
private String transactionId = null;
/* getters and setters here */
}
package ThreadLocal;
/**
* this class acts as a container to our thread local variables.
* @author vsundar
*
*/
public class MyThreadLocal {
public static final ThreadLocal userThreadLocal = new ThreadLocal();
public static void set(Context user) {
userThreadLocal.set(user);
}
public static void unset() {
userThreadLocal.remove();
}
public static Context get() {
return (Context) userThreadLocal.get();
}
}
package ThreadLocal;
public class ThreadLocalDemo extends Thread {
public static void main(String args[]) {
Thread threadOne = new ThreadLocalDemo();
threadOne.start();
Thread threadTwo = new ThreadLocalDemo();
threadTwo.start();
}
@Override
public void run() {
// sample code to simulate transaction id
Context context = new Context();
context.setTransactionId(getName());
// set the context object in thread local to access it somewhere else
MyThreadLocal.set(context);
/* note that we are not explicitly passing the transaction id */
new BusinessService().businessMethod();
MyThreadLocal.unset();
}
}
No comments:
Post a Comment