大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java多線程編程概述
Java多線程的安全問(wèn)題
Java多線程同步
Java多線程間的通信
Java線程Lock
Java多線程管理
保障線程安全的設(shè)計(jì)技術(shù)
Java鎖的優(yōu)化及注意事項(xiàng)
Java多線程集合
【Java多線程】單例模式與多線程

Java ThreadLocal使用

除了控制資源的訪問(wèn)外, 還可以通過(guò)增加資源來(lái)保證線程安全,ThreadLocal主要解決為每個(gè)線程綁定自己的值。

package com.wkcto.threadlocal;

/**
 * ThreadLocal的基本使用
 */
public class Test01 {
    //定義ThreadLocal對(duì)象
    static  ThreadLocal threadLocal = new ThreadLocal();
    //定義線程類
    static  class  Subthread extends Thread{
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                //設(shè)置線程關(guān)聯(lián)的的值
                threadLocal.set( Thread.currentThread().getName() + " - " + i);
                //調(diào)用get()方法讀取關(guān)聯(lián)的值
                System.out.println(Thread.currentThread().getName() + " value = " + threadLocal.get());
            }
        }
    }

    public static void main(String[] args) {
        Subthread t1 = new Subthread();
        Subthread t2 = new Subthread();
        t1.start();
        t2.start();

    }
}
package com.wkcto.threadlocal;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *  在多線程環(huán)境中,把字符串轉(zhuǎn)換為日期對(duì)象,多個(gè)線程使用同一個(gè)SimpleDateFormat對(duì)象可能會(huì)產(chǎn)生線程安全問(wèn)題,有異常
 *  為每個(gè)線程指定自己的SimpleDateFormat對(duì)象, 使用ThreadLocal
 */
public class Test02 {
    //定義SimpleDateFormat對(duì)象,該對(duì)象可以把字符串轉(zhuǎn)換為日期
//    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    static ThreadLocal threadLocal = new ThreadLocal<>();
    //定義Runnable接口的實(shí)現(xiàn)類
    static class ParseDate implements Runnable{
        private  int i = 0 ;
        public ParseDate(int i) {
            this.i = i;
        }

        @Override
        public void run() {
            try {
                String text = "2068年11月22日 08:28:" + i%60;      //構(gòu)建日期字符串
//                Date date = sdf.parse(text);        //把字符串轉(zhuǎn)換為日期
                //先判斷當(dāng)前線程是否有SimpleDateFormat對(duì)象,如果當(dāng)前線程沒(méi)有SimpleDateFormat對(duì)象就創(chuàng)建一個(gè),如果有就直接使用
                if (threadLocal.get() == null){
                    threadLocal.set(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"));
                }
                Date date = threadLocal.get().parse(text);
                System.out.println(i + " -- " + date);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        //創(chuàng)建100個(gè)線程
        for (int i = 0; i < 100; i++) {
            new Thread(new ParseDate(i)).start();
        }
    }
}
package com.wkcto.threadlocal;

import java.util.Date;
import java.util.Random;

/**
 * ThreadLocal初始值, 定義ThreadLocal類的子類,在子類中重寫(xiě)initialValue()方法指定初始值,再第一次調(diào)用get()方法不會(huì)返回null
 */
public class Test03 {
    //1) 定義ThreadLocal的子類
    static class SubThreadLocal extends ThreadLocal{
        // 重寫(xiě)initialValue方法,設(shè)置初始值
        @Override
        protected Date initialValue() {
//            return new Date();  //把當(dāng)前日期設(shè)置為初始化
            return  new Date(System.currentTimeMillis() - 1000*60*15);
        }
    }

    //定義ThreadLocal對(duì)象
//    static ThreadLocal threadLocal = new ThreadLocal();
    //直接使用自定義的SubThreadLocal對(duì)象
    static SubThreadLocal threadLocal = new SubThreadLocal();

    //定義線程類
    static class SubThread extends  Thread{
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                //第一次調(diào)用threadLocal的get()方法會(huì)返回null
                System.out.println("---------" + Thread.currentThread().getName() + " value=" + threadLocal
                .get());
                //如果沒(méi)有初始值就設(shè)置當(dāng)前日期
                if ( threadLocal.get() == null ){
                    System.out.println("*****************");
                    threadLocal.set(new Date());
                }
                try {
                    Thread.sleep(new Random().nextInt(500));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        SubThread t1 = new SubThread();
        t1.start();
        SubThread t2 = new SubThread();
        t2.start();
    }
}

 
全部教程
主站蜘蛛池模板: 91久久亚洲国产成人精品性色 | 99热这里精品 | 在线欧美一区 | 最猛黑人xxxⅹ黑人猛交 | 国产免费三a在线 | 激情综合网五月激情 | 亚洲婷婷在线 | 欧美xxxx成人免费网站 | 经典国产乱子伦精品视频 | 亚洲日本va中文字幕区 | 国产伦精品一区二区三区免费观看 | 亚洲视频日韩视频 | 国产成人综合高清在线观看 | 99久久免费国产精品 | 噜噜噜天天躁狠狠躁夜夜精品 | 亚洲精品中文字幕久久久久久 | xxxxbbbb性猛hd高清 | 女性特黄一级毛片 | 九九热免费在线观看 | 高清视频在线播放 | 高清不卡一区 | 99精品国产高清自在线看超 | 久久精品首页 | 被公侵犯肉体中文字幕一区二区 | 亚洲国产最新 | 久久精品国产99久久72 | japanese乱子欧美 | 888米奇四色极速在线观看 | 四虎影视成人永久在线播放 | 中文字幕中韩乱码亚洲大片 | 日本一区精品 | 国产色婷婷精品免费视频 | 九热视频| 妖精视频免费在线观看 | 日本一本久 | 99热久久这里只有精品6 | 99热这里有免费国内精品 | 99资源| 免费一级特黄 | 国产福利在线小视频 | 色婷婷狠狠五月综合天色拍 |