- public class SequenceNumber {
- //①通過匿名內部類覆蓋ThreadLocal的initialValue()方法,指定初始值
- private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){
- public Integer initialValue(){
- return 0;
- }
- };
- //②獲取下一個序列值
- public int getNextNum(){
- seqNum.set(seqNum.get()+1);
- return seqNum.get();
- }
- public static void main(String[ ] args)
- {
- SequenceNumber sn = new SequenceNumber();
- //③ 3個線程共享sn,各自產生序列號
- TestClient t1 = new TestClient(sn);
- TestClient t2 = new TestClient(sn);
- TestClient t3 = new TestClient(sn);
- t1.start();
- t2.start();
- t3.start();
- }
- private static class TestClient extends Thread
- {
- private SequenceNumber sn;
- public TestClient(SequenceNumber sn) {
- this.sn = sn;
- }
- public void run()
- {
- //④每個線程打出3個序列值
- for (int i = 0; i < 3; i++) {
- System.out.println("thread["+Thread.currentThread().getName()+
- "] sn["+sn.getNextNum()+"]");
- }
- }
- }
- }
- public class TopicDao {
- //①使用ThreadLocal保存Connection變量
- private static ThreadLocal<Connection> connThreadLocal = new ThreadLocal<Connection>();
- public static Connection getConnection(){
- //②如果connThreadLocal沒有本線程對應的Connection創建一個新的Connection,
- //並將其保存到線程本地變量中。
- if (connThreadLocal.get() == null) {
- Connection conn = ConnectionManager.getConnection();
- connThreadLocal.set(conn);
- return conn;
- }else{
- //③直接返回線程本地變量
- return connThreadLocal.get();
- }
- }
- public void addTopic() {
- //④從ThreadLocal中獲取線程對應的
- Statement stat = getConnection().createStatement();
- }
- }