多線程

簡單講解了關(guān)于多線程的一些應(yīng)用:線程進(jìn)程的概念區(qū)別刨裆,定義多線程,多線程之間的通信彬檀,線程的死鎖帆啃,以及線程的優(yōu)先級。此類問題在Java面試當(dāng)中經(jīng)常觸及窍帝。


多線程.png

1.多線程的實(shí)踐:

package Thread;
public class Live implements Runnable{
    public void run() {
        for(int i = 1;i<=6;i++){
            System.out.println("摳腳"+i+"次");
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

package Thread;
public class Play extends Thread{
    public void run(){
        for(int i=1;i<=30;i++){
            System.out.println("who打單機(jī):第"+i+"局努潘,輸了,玩的真菜坤学!");
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

package Thread;
/*
 * 多線程同時執(zhí)行疯坤,有兩種實(shí)現(xiàn)多線程的方法,一種是繼承類深浮,一種是實(shí)現(xiàn)接口压怠。
 * 繼承: 繼承Thread的話,該子類應(yīng)重寫 Thread 類的 run 方法飞苇。接下來可以分配并啟動該子類的實(shí)例
 * 實(shí)現(xiàn)接口:聲明實(shí)現(xiàn) Runnable 接口的類菌瘫,該類然后實(shí)現(xiàn) run 方法蜗顽。
 * 然后可以分配該類的實(shí)例,在創(chuàng)建 Thread 時作為一個參數(shù)來傳遞并啟動雨让。
 * */
public class Thread_jichu { 
    
    public static void print(){
        for(int i=1;i<=50;i++){
            System.out.println("who看泄透牵花的貼身高手:第"+i+"集,看的挺嗨的栖忠!");
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
        Thread t = new Play();  
        Live l = new Live();    
        Thread t1 = new Thread(l);
        t1.start();
        t.start();
        
        print();
    }
}

2.線程安全和同步:

package Thread;

public class Synchronized_tongbu {
    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        Thread husband = new BankThread(account);
        Thread wife = new BankThread(account);
        husband.start();
        wife.start();
    }
}
class BankAccount{
    private double balance = 1000;
    public boolean depasit(double newAdd){
        if(newAdd <=0){
            return false;           
        }else{
            synchronized(this){//鎖方法和鎖局域代碼
                System.out.println("當(dāng)前余額為:"+balance);
                try {
                    Thread.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                balance = balance + newAdd;
            }
            System.out.println("新的余額為:" + balance);
        }
        return true;    
    }
}
class BankThread extends Thread{
    private BankAccount bankAccount;
    public BankThread(BankAccount account){
        bankAccount = account;
    }
    public void run(){
        bankAccount.depasit(200);
    }
    
}
死鎖
package Thread;
/*
 * 由于加鎖崔挖,所以在取資源時某一方?jīng)]有使用完不得進(jìn)入該空間。
 * 
 * */
public class DeadLock {

    public static void main(String[] args) {
        Object object1 = new  Object();
        Object object2 = new  Object();
        Thread ta = new A(object1, object2);
        Thread tb = new B(object1, object2);
        ta.start();
        tb.start();
    }

}

class A extends Thread {
    Object object1;
    Object object2;

    public A(Object object1, Object object2) {
        this.object1 = object1;
        this.object2 = object2;
    }

    public void run() {
        synchronized (object1) {
            System.out.println("A取到了object1");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized(object2){
                System.out.println("A拿到了object1和object2");
        }
        }
    }
}

class B extends Thread {
    public Object object1;
    public Object object2;

    public B(Object object1, Object object2) {
        this.object1 = object1;
        this.object2 = object2;
    }

    public void run() {
        synchronized (object2) {
            System.out.println("B取到了object1");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized(object1){
                System.out.println("B拿到了object1和object2");
        }
        }
    }
}
如上代碼會出現(xiàn)死鎖庵寞,未能A B都未能取到所需虚汛,將B run方法中object2 object1調(diào)換即可。取得順序相同很慶幸解決了問題皇帮。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛋辈,隨后出現(xiàn)的幾起案子属拾,更是在濱河造成了極大的恐慌,老刑警劉巖冷溶,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐白,死亡現(xiàn)場離奇詭異,居然都是意外死亡逞频,警方通過查閱死者的電腦和手機(jī)纯衍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苗胀,“玉大人襟诸,你說我怎么就攤上這事』” “怎么了歌亲?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澜驮。 經(jīng)常有香客問我陷揪,道長,這世上最難降的妖魔是什么杂穷? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任悍缠,我火速辦了婚禮,結(jié)果婚禮上耐量,老公的妹妹穿的比我還像新娘飞蚓。我一直安慰自己,他們只是感情好廊蜒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布玷坠。 她就那樣靜靜地躺著蜗搔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪八堡。 梳的紋絲不亂的頭發(fā)上樟凄,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音兄渺,去河邊找鬼缝龄。 笑死,一個胖子當(dāng)著我的面吹牛挂谍,可吹牛的內(nèi)容都是我干的叔壤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼口叙,長吁一口氣:“原來是場噩夢啊……” “哼炼绘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妄田,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤俺亮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疟呐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脚曾,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年启具,在試婚紗的時候發(fā)現(xiàn)自己被綠了本讥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲁冯,死狀恐怖鲜锚,靈堂內(nèi)的尸體忽然破棺而出重荠,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布舍扰,位于F島的核電站与纽,受9級特大地震影響赦颇,放射性物質(zhì)發(fā)生泄漏嗜桌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一好港、第九天 我趴在偏房一處隱蔽的房頂上張望愉镰。 院中可真熱鬧,春花似錦钧汹、人聲如沸丈探。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碗降。三九已至隘竭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讼渊,已是汗流浹背动看。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爪幻,地道東北人菱皆。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像挨稿,于是被迫代替她去往敵國和親仇轻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容