<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    I want to fly higher
    programming Explorer
    posts - 114,comments - 263,trackbacks - 0
        直接看代碼示例
        
    package com.book.java7.concurrency;

    import java.time.LocalDate;
    import java.util.concurrent.TimeUnit;

    /**
     * {@link InheritableThreadLocal}示例
     * 
     * <pre>
     * public class InheritableThreadLocal<T> extends ThreadLocal<T> {
     *     protected T childValue(T parentValue) {
     *         return parentValue;
     *     }
     * </pre>
     * 
     * <pre>
     *     childValue方法是在子線程初始化時調用的,可(Thread.dump).將【子線程-childValue】和date綁定.
     *  子線程調用date.get時, 會取到子線程初始化時放到ThreadLocalMap的值.
     * </pre>
     * 
     * <p>
     * landon認為其實是用線程局部變量這個類更多的原因可能在于為了隱藏線程內部的一些實現細節,使用戶外部調用更簡單,完全不必理會線程內部的一些東西!
     * 
     * @author landon
     *
     
    */

    public class InheritableThreadLocalExample {

        
    private static class Task implements Runnable {

            
    // InheritableThreadLocal局部變量
            private static InheritableThreadLocal<LocalDate> date = new InheritableThreadLocal<LocalDate>() {
                
    // 初始化
                protected LocalDate initialValue() {
                    
    return LocalDate.now();
                }


                
    // 首先輸出繼承的值.然后改變子線程局部變量的值(加了一天)
                protected LocalDate childValue(LocalDate parentValue) {
                    
    // Thread.dumpStack();

                    System.out.println(String.format("call childValue Thread:%s,parentValue:%s", Thread.currentThread()
                            .getName(), parentValue));

                    
    return parentValue.plusDays(1);
                }

            }
    ;

            @Override
            
    public void run() {
                System.out.println(String.format("%s:task begin.date:%s", Thread.currentThread().getName(), date.get()));

                
    try {
                    TimeUnit.SECONDS.sleep(1);
                }
     catch (InterruptedException e) {
                    e.printStackTrace();
                }


                
    // 創建一個子線程
                
    // 從輸出可以看到:此時輸出的是childValue改變后的值
                Thread subThread = new Thread(Thread.currentThread().getName() + "-sub"{
                    @Override
                    
    public void run() {
                        System.out.println(String.format("%s:task execute.date:%s", Thread.currentThread().getName(),
                                date.get()));
                    }

                }
    ;

                subThread.start();

                System.out.println(String.format("%s:task end.date:%s", Thread.currentThread().getName(), date.get()));
            }

        }


        
    public static void main(String[] args) throws Exception {
            Task task = new Task();

            
    for (int i = 0; i < 3; i++{
                Thread t 
    = new Thread(task, "Main-Sub-" + i);
                t.start();

                Thread.sleep(
    1000);
            }

        }

    }

    posted on 2014-11-25 16:22 landon 閱讀(6151) 評論(0)  編輯  收藏 所屬分類: Program
    主站蜘蛛池模板: 日本免费人成网ww555在线| 污污污视频在线免费观看| 亚洲精品WWW久久久久久| 亚洲乱码卡一卡二卡三| 欧洲精品成人免费视频在线观看 | 亚洲人成毛片线播放| 91热久久免费精品99| 91亚洲导航深夜福利| 亚洲网站在线免费观看| 亚洲性无码av在线| 久久国产免费福利永久| 午夜在线a亚洲v天堂网2019| 在线A级毛片无码免费真人 | 亚洲成人黄色在线观看| 999在线视频精品免费播放观看 | 亚洲日本国产乱码va在线观看| 亚洲精品免费观看| 亚洲国产片在线观看| 妞干网免费观看视频| 爱爱帝国亚洲一区二区三区| 久久精品一本到99热免费| 亚洲精品中文字幕无乱码| 18禁成年无码免费网站无遮挡| 亚洲精品无码aⅴ中文字幕蜜桃| 国产免费一区二区三区VR| 亚洲国产视频网站| 色视频色露露永久免费观看| 久久精品a亚洲国产v高清不卡| 成人免费大片免费观看网站| 久久亚洲中文字幕无码| 亚洲色偷偷偷鲁综合| 最近免费中文字幕大全高清大全1| 亚洲人成电影网站久久| 深夜国产福利99亚洲视频| 九九精品成人免费国产片| 亚洲一级毛片免费在线观看| 免费一级e一片在线播放| 免费无码黄网站在线看| 亚洲最大的成人网| 中文字幕一精品亚洲无线一区| 无码亚洲成a人在线观看|