Java 多執行緒操作

2021-08-03 10:09:12 字數 2374 閱讀 5639

一共兩種建立方法,一:

public

class

thread

}public

inte***ce

runnable()

}//下面是自己要實現的

class

bimplements

runnable

}thread t1=new thread(new b());

//什麼時候執行我們無法控制,甚至順序都可能改變

t1.start();

第二鐘建立方法

public

class

mythread

extends

threads

//使用匿名類,匿名類沒有建構函式

//但是可以加一對{}作為初始化函式

//怎樣呼叫父類的建構函式呢?那個()就是那個意思了

thread t1=new thread()

public

void

run()[

}};t1.start();

//實現介面,

thread t1=new thread(new runnable()

public

void

run()[

}});

t1.start();

強行終止執行緒 t.stop();

掛起執行緒 t.suspend();

繼續工作 t.resume();

執行緒狀態:running,ready

thread.sleep(1000);

這是靜態函式,讓執行到這行**的那個程式停一下

thread.yield();

也是靜態,從running變成ready一下,讓別的程序跑會

同步**,使用synchronized物件鎖,任何乙個物件其實都有乙個隱含的物件鎖,通過鎖來保護共享資料

lock不止可以加在物件上,也可以加在**段上

public

class

twolock

void b()

}void c()

void d()

1.同步洩露 ,訪問共享資料的**有些加鎖有的沒加鎖

2.共享資料往往是類的成員變數

3.但是對函式內的新的區域性變數都是不需要加在鎖內的

4.同步**會使速度變慢,盡量少用

原子的操作,不可分割的

這個可以直接用來修飾共享資料,這樣其他函式對它的操作一定是被保護的,但是只是對與簡單的操作,比如就簡單的讀寫操作才可以。複雜的函式volatile就沒效果了,所以還是要用sync

synchronized

public

void

push(char c)

//我這裡使用new byte[0].wait()不可以,因為wait和notify函式是定義在物件上的,我可以呼叫任何乙個物件讓它等待

//我這裡直接使用new byte[0].wait()不可以,因為呼叫wait一定要持有這個物件的鎖,而只有操作它時才能有它的鎖!

}catch(interruptedexception)

}data[index]=c;

index++;

notifyall();

//或者使用notify(),是喚醒這個鎖下的某乙個執行緒,而notifyall()是喚醒這個鎖下的全部執行緒,執行緒會先爭用cpu執行權,然後爭用物件鎖。我們應該都使用nootifyall(),因為儘管效率會有點點低,但總不會**漏掉**執行緒。

}synchronized

public

char

pop()catch(exception e){}

}index--;

notifyall();

return data[index];

}

其實上面的**不好,因為wait的條件其實不一致,是兩夥兒的

什麼時候可以用notify()?

我們其實應該有兩把鎖,這樣上面**要改寫很多(其實下面的**是有死鎖風險的,需要再有乙個額外的flag去避免死鎖)

併發

重要類:linkedblockingqueue

public

static linkedblockingqueue q=new();

thread t1=new thread()

}};thread t2=new thread()

}};

java 多執行緒 原子操作 一

對於乙個集合 需要在加入之前 執行 先檢查後執行 的步驟以達到 若沒有則新增,若有則不新增 的目的,實行多執行緒以提高效率。notthreadsafe public class listhelper 可惜的是這段 並不能保證能夠正確的完成工作,這是為什麼呢?集合和動作都已經被synchronized...

java多執行緒

在網上看到很有意思的問題,摘下來好好看下 在面試的時候被問了乙個多執行緒的問題 回來仔細思考了一下,多執行緒是否真的能提高了效率?我對多執行緒的理解就是 比如挖乙個隧道,有2種開工方法 1 只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒 2 在山的兩頭挖,同時開工,最後在山的...

Java 多執行緒

1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...