<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 閱讀(6147) 評論(0)  編輯  收藏 所屬分類: Program
    主站蜘蛛池模板: 亚洲精品在线不卡| 一日本道a高清免费播放| 亚洲精品无码av天堂| 免费国产叼嘿视频大全网站| 亚洲最大在线观看| 亚洲综合色在线观看亚洲| 国产曰批免费视频播放免费s| 欧洲美女大片免费播放器视频| 亚洲av午夜成人片精品网站| 卡一卡二卡三在线入口免费| 一级黄色免费网站| 亚洲日本在线电影| 亚洲Av无码精品色午夜| 免费人成激情视频| 免费精品国偷自产在线在线| 香蕉免费在线视频| 美国毛片亚洲社区在线观看| 亚洲黄色高清视频| 久久亚洲成a人片| 久久久青草青青国产亚洲免观| 麻豆国产人免费人成免费视频| 最近在线2018视频免费观看| 男女拍拍拍免费视频网站| 国产精品亚洲综合| 亚洲AV成人一区二区三区观看 | 免费欧洲毛片A级视频无风险| 日本一道高清不卡免费| 男女一边桶一边摸一边脱视频免费 | 激情综合亚洲色婷婷五月APP| 亚洲成年人电影网站| 亚洲狠狠狠一区二区三区| 亚洲色欲或者高潮影院| 亚洲国产91在线| 亚洲欧美日本韩国| 亚洲AV成人一区二区三区观看| av网站免费线看| 97国产在线公开免费观看| 免费看国产一级特黄aa大片| 亚洲精品色午夜无码专区日韩| 亚洲人成在线中文字幕| 免费福利在线观看|