<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方法是在子線程初始化時(shí)調(diào)用的,可(Thread.dump).將【子線程-childValue】和date綁定.
     *  子線程調(diào)用date.get時(shí), 會取到子線程初始化時(shí)放到ThreadLocalMap的值.
     * </pre>
     * 
     * <p>
     * landon認(rèn)為其實(shí)是用線程局部變量這個(gè)類更多的原因可能在于為了隱藏線程內(nèi)部的一些實(shí)現(xiàn)細(xì)節(jié),使用戶外部調(diào)用更簡單,完全不必理會線程內(nèi)部的一些東西!
     * 
     * @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();
                }


                
    // 創(chuàng)建一個(gè)子線程
                
    // 從輸出可以看到:此時(shí)輸出的是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 閱讀(6148) 評論(0)  編輯  收藏 所屬分類: Program
    主站蜘蛛池模板: 99久久综合精品免费| 在线观看特色大片免费网站| 一级白嫩美女毛片免费| 久久国产乱子伦精品免费午夜| 在线观看片免费人成视频无码| 真实国产乱子伦精品免费| 免费无码又黄又爽又刺激| 国产免费人成在线视频| 亚洲色欲久久久综合网| 亚洲资源在线视频| 色偷偷尼玛图亚洲综合| 你是我的城池营垒免费观看完整版| 免费观看美女用震蛋喷水的视频| 午夜一级毛片免费视频| 国产亚洲精久久久久久无码AV| 亚洲码一区二区三区| 国产亚洲综合视频| 免费人成视频在线观看网站| 四虎影院免费视频| 亚洲小说区图片区另类春色| 亚洲一级大黄大色毛片| 视频免费1区二区三区| 最近免费中文字幕mv在线电影| 日韩免费一级毛片| 亚洲日韩一页精品发布| 33333在线亚洲| 中文在线免费观看| 最近中文字幕免费mv视频7| 中文字幕亚洲电影| 亚洲AV色吊丝无码| 精品熟女少妇aⅴ免费久久| 中文字幕无码成人免费视频| 国产亚洲精品无码拍拍拍色欲| 国产精品久久亚洲不卡动漫| 亚洲日韩在线观看免费视频| 九九九精品成人免费视频| 亚洲人成亚洲人成在线观看 | 亚洲va在线va天堂成人| 一级毛片a免费播放王色| 免费观看黄网站在线播放| 亚洲韩国精品无码一区二区三区 |