導航:首頁 > 編程語言 > 非同步任務java

非同步任務java

發布時間:2022-08-30 14:02:38

java 同一個非同步任務內的非同步任務能不能並發

是三個線程同時運行還是依次運行,從你給的代碼看不出來,要看excute()方法里線程類用的是哪個方法,如果是用.start()方法就是同時運行,如果用run()方法則依次運行。
不過用start()方法,那三個線程就和主線程是並行運行,可能產生你的Load1Async Load2Async Load3Async 沒有運行完就去運行LoadPicAsync()了。如果LoadPicAsync()離需要用到Load1Async返回的對象,就一定要等Load1Async Load2Async Load3Async是否都運行完了,再運行LoadPicAsync()。

Ⅱ Java 怎麼在Main函數中,執行完非同步任務後才退出主

要實現這個情況,必須知道以下幾點 1、java中線程的結束是由run方法運行完成後自動結束的 2、在main線程(主線程)中,需要得到所有線程的引用。 3、知道jdk提供的CountDownLatch的用法 例子如下: public static void main(String[] args) throwsJava 怎麼在Main函數中,執行完非同步任務後才退出主

Ⅲ java非同步方法什麼意思

在JAVA平台,實現非同步調用的角色有如下三個角色:調用者,取貨憑證,真實數據
非同步調用就是:一個調用者在調用耗時操作,不能立即返回數據時,先返回一個取貨憑證.然後在過一斷時間後憑取貨憑證來獲取真正的數據.
如果數據將在線程間共享。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用非同步編程,在很多情況下採用非同步途徑往往更有效率
只有一個馬桶
很多人上廁所
要排隊
這叫同步迅雷一次可以下載很多東西
這叫非同步

Ⅳ java隊列實現非同步執行

在整個思路上要調整一下

1、會有很多線程給一個隊列上添加任務

2、有一個或者多個線程逐個執行隊列的任務


考慮一下幾點:

1、沒有任務時,隊列執行線程處於等待狀態

2、添加任務時,激活隊列執行線程,全部run起來,首先搶到任務的執行,其他全部wait


給個小例子吧

packageorg;
importjava.util.LinkedList;
importjava.util.List;
publicclassQueues{
publicstaticList<Task>queue=newLinkedList<Task>();
/**
*假如參數o為任務
*@paramo
*/
publicstaticvoidadd(Taskt){
synchronized(Queues.queue){
Queues.queue.add(t);//添加任務
Queues.queue.notifyAll();//激活該隊列對應的執行線程,全部Run起來
}
}
staticclassTask{
publicvoidtest(){
System.out.println("我被執行了");
}
}
}
packageorg;
importjava.util.List;
{
@Override
publicvoidrun(){
while(true){
synchronized(Queues.queue){
while(Queues.queue.isEmpty()){//
try{
Queues.queue.wait();//隊列為空時,使線程處於等待狀態
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("wait...");
}
Queues.Taskt=Queues.queue.remove(0);//得到第一個
t.test();//執行該任務
System.out.println("end");
}
}
}
publicstaticvoidmain(String[]args){
Exece=newExec();
for(inti=0;i<2;i++){
newThread(e).start();//開始執行時,隊列為空,處於等待狀態
}
//上面開啟兩個線程執行隊列中的任務,那就是先到先得了
//添加一個任務測試
Queues.Taskt=newQueues.Task();
Queues.add(t);//執行該方法,激活所有對應隊列,那兩個線程就會開始執行啦
}

}


上面的就是很簡單的例子了

Ⅳ java如何實現線程非同步

Thread t=new Thread(){
public void run(){
//保存信息操作
}
}
t.start();
//同時做別的事情.

Ⅵ java中非同步處理和同步處理分別是什麼意思

舉個例子:A和B一起從某點出發到終點。

  1. 同步就是只能A走完某一段然後停下,讓B開始走一段再停下,再讓A走。如此往復。簡單理解就是,必須是一段程序執行完後才能執行後面的程序。

  2. 非同步就是,同一時間可能A和B同時都在往終點趕,此時不存在先後順序,就是說,兩個程序可以同時執行,稱為非同步。

Ⅶ 如何用JAVA實現非同步信息處理

一個進程專門循環這個list處理這個消息。是進程還是線程?進程間共享數據,你的list不是直接就能訪問的,所以估計LZ說的是線程

如果LZ想省點工作,可以用BlockingQueue來代替你的list,這樣線程等待和喚醒不用你自己寫代碼實現了,如果非要用list,那麼就自己做好同步

list的小例子,LZ自己參考發揮吧

class MessageConsumer extends Thead {
private List<YourMessageType> list;
private boolean running = true;
public MessageConsumer(List<YourMessageType> list) {this.list = list;}

public void run() {
while (running) {
YourMessageType msg = null;
try {
synchronized(list) {
while (list.size() == 0) {
list.wait();
}
msg = list.remove(0);
list.notiryAll();
}
} catch (Exception e) {
e.printStackTrace();
}

if (msg == null) continue;

//System.out.println(msg); //print message
}
}
}

//調用sample
class ShareMole {
List<YourMessageType> list = new ArrayList<YourMessageType>();
...
}

public class Main {
public static void main(String[] args) {
ShareMule sm; //so on

...

Thread t = new MessageConsumer(sm.list);
t.start();

...
}
}

Ⅷ java 線程池非同步任務需要處理非同步結果會阻塞嗎

1、關於非同步:java中非同步請求就是*調用*在發出之後,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程調用發出後,調用者不會立刻得到結果。而是在*調用*發出後,*被調用者*通過狀態、通知來通知調用者,或通過回調函數處理

閱讀全文

與非同步任務java相關的資料

熱點內容
vc6查看編譯的錯誤 瀏覽:595
心理大全pdf 瀏覽:1002
區域鏈加密幣怎麼樣 瀏覽:341
查找命令符 瀏覽:95
壓縮工具zar 瀏覽:735
白盤怎麼解壓 瀏覽:474
辰語程序員學習筆記 瀏覽:47
程序員被公司勸退 瀏覽:523
java三子棋 瀏覽:692
加密空間怎麼強制進入 瀏覽:345
ug分割曲線命令 瀏覽:209
學碼思程序員 瀏覽:609
自考雲學習app為什麼登不上 瀏覽:410
domcer伺服器晝夜更替怎麼搞 瀏覽:436
plc和單片機哪個好 瀏覽:535
帝國神話組建雲伺服器 瀏覽:827
鄧散木pdf 瀏覽:199
方舟怎麼直連伺服器圖片教程 瀏覽:563
假相pdf 瀏覽:336
找對象找程序員怎麼找 瀏覽:976