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

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

線(xiàn)程鎖死

等待線(xiàn)程由于喚醒線(xiàn)程所需要的條件 永遠(yuǎn)無(wú)法成立導(dǎo)致線(xiàn)程一直無(wú)法處于RUNNABLE狀態(tài),我們就稱(chēng)這個(gè)線(xiàn)程被鎖死。

雖然死鎖與鎖死表現(xiàn)出來(lái)都是線(xiàn)程等待,無(wú)法繼續(xù)完成任務(wù),但是產(chǎn)生的條件是不同的,即使在不可能產(chǎn)生死鎖的情況下也可能出現(xiàn)鎖死,所以不能使用對(duì)付死鎖的辦法來(lái)解決鎖死問(wèn)題。

鎖死包括信號(hào)丟失鎖死和嵌套監(jiān)視器鎖死。

信號(hào)丟失鎖死的典型案例是等待線(xiàn)程執(zhí)行Object.wait()/Condition.await()前沒(méi)有對(duì)保護(hù)條件進(jìn)行判斷,可能沒(méi)有其他的線(xiàn)程更新相應(yīng)的保護(hù)條件涉及的變量使其成立并通知線(xiàn)程,使得線(xiàn)程一直處于等待狀態(tài)。

嵌套監(jiān)視鎖死是嵌套鎖導(dǎo)致線(xiàn)程永遠(yuǎn)無(wú)法被喚醒,如有等待方法:

public void waitMethod(){
   synchronized( lock1) {
      synchronized( lock2){
         while( 條件 ){
            lock2.wait();
         }
      }
      //....
   }
}

還有喚醒 方法如下:

public void notifyMethod(){
   synchronized( lock1) {
      synchronized( lock2){
         lock2.notifyAll();
      }
   }
}
package com.wkcto.threadactivity.lockdead;

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * 演示嵌套監(jiān)視鎖死
 */
public class Test {
    public static void main(String[] args) {
        //創(chuàng)建線(xiàn)程,調(diào)用 putData方法向隊(duì)列中存儲(chǔ)數(shù)據(jù)
        new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while ( i-- < 1000){
                    putData("data--" + i);
                    try {
                        Thread.sleep(new Random().nextInt(50));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        //創(chuàng)建線(xiàn)程調(diào)用getData方法從隊(duì)列中取數(shù)據(jù)
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    getData();
                }
            }
        }).start();
        /*
            程序運(yùn)行后,不管是putData()方法還是getData()方法獲得鎖的順序是相同,不可能產(chǎn)生死鎖
            運(yùn)行后出現(xiàn)等待的情況,是因?yàn)榍短妆O(jiān)視鎖死導(dǎo)致的等待
         */
    }

    //定義阻塞隊(duì)列
    private static final BlockingQueue QUEUE = new ArrayBlockingQueue<>(10);

    //定義方法向隊(duì)列中添加數(shù)據(jù)
    public static synchronized void putData(String data){
        //在同步代碼塊(臨界區(qū))中,調(diào)用阻塞隊(duì)列QUEUE的put()/take()這些阻塞方法,可能會(huì)導(dǎo)致嵌套監(jiān)視鎖死
        try {
            QUEUE.put(data);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //定義方法從隊(duì)列中取數(shù)據(jù)
    public static synchronized void getData(){
        try {
            String data = QUEUE.take();
            System.out.println("取出數(shù)據(jù): " + data);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

全部教程
主站蜘蛛池模板: 99久久免费国产精品特黄 | 看黄色免费网站 | 免费99热在线观看 | 91久久国产成人免费观看资源 | 国产精品亚洲专一区二区三区 | 四虎四虎1515hhcom | 伊人中文在线 | 欧美aaa毛片免费看 欧美aaa性bbb毛片 | 欧美性视频在线 | 日日添日日摸 | 欧美成人私人视频88在线观看 | aaaa一级片 | 曰本色wa | 国产精品高清一区二区不卡 | 久久国产免费一区二区三区 | 99在线观看免费视频 | 亚洲国产成a人v在线观看 | 久久国产精品男女热播 | 国产一区二区三区乱码网站 | 午夜噜噜噜私人影院在线播放 | 二级毛片在线观看 | 91精品视频网 | 在线播放精品视频 | 亚洲中字幕 | 亚洲精品久久久久久久福利 | 不卡一二区 | 国产成人一区二区三区影院免费 | 亚洲精品国产成人中文 | 一级在线毛片 | 亚洲视频毛片 | 亚洲日本va中文字幕在线不卡 | 我要看欧美精品一级毛片 | 国产一区二 | 在线免费一区二区 | 精品乱码一区二区三区四区 | 免费视频精品一区二区三区 | 成人欧美一区二区三区白人 | 欧美成人午夜免费完成 | 日韩在线欧美在线 | 精品视频国产 | 麻豆国内精品欧美在线 |