java非同步任務
① java 同一個非同步任務內的非同步任務能不能並發
是三個線程同時運行還是依次運行,從你給的代碼看不出來,要看excute()方法里線內程類用的是哪個方容法,如果是用.start()方法就是同時運行,如果用run()方法則依次運行。
不過用start()方法,那三個線程就和主線程是並行運行,可能產生你的Load1Async Load2Async Load3Async 沒有運行完就去運行LoadPicAsync()了。如果LoadPicAsync()離需要用到Load1Async返回的對象,就一定要等Load1Async Load2Async Load3Async是否都運行完了,再運行LoadPicAsync()。
② 如何用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 怎麼在Main函數中,執行完非同步任務後才退出主線程
要實現這個情況,必須知道以下幾點
1、java中線程的結束是由run方法運行完成後自動結束的
2、在main線程(主線程)中,需要得到所有線程的引用。
3、知道jdk提供的CountDownLatch的用法
例子如下:
public static void main(String[] args) throws InterruptedException
{
//CountDownLatch作為計數器紀錄有幾個線程,例如有2個線程
CountDownLatch latch=new CountDownLatch(2);
Worker worker1=new Worker( latch);
Worker worker2=new Worker(latch);
worker1.start();// 啟動線程
worker2.start();//
//等待所有工人完成工作
latch.await();
System.out.println("all work done at "+sdf.format(new Date()));
}
class Worker extends Thread
{
private CountDownLatch latch;
public Worker(CountDownLatch latch)
{
this.latch = latch;
}
public void run()
{
xxxxx
//在run方法結束之前,講線程計數器減一
latch.countDown();
}
}
④ java 線程池非同步任務需要處理非同步結果會阻塞嗎
1、關於非同步:來java中非同步請求就是*調用自*在發出之後,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程調用發出後,調用者不會立刻得到結果。而是在*調用*發出後,*被調用者*通過狀態、通知來通知調用者,或通過回調函數處理
⑤ 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 非同步 意思
同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事
非同步專: 請求通過事件屬觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢
同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。
非同步就是你叫我,然後自己去吃飯,我得到消息後可能立即走,也可能等到下班才去吃飯。
⑨ java中同步和非同步有什麼異同
Java中交互方式分為同步和非同步兩種,異同情況如下:
同步交互:指發送一個請求,需要等待返回,然後才能夠發送下一個請求,有個等待過程;
非同步交互:指發送一個請求,不需要等待返回,隨時可以再發送下一個請求,即不需要等待。區別:一個需要等待,一個不需要等待,在部分情況下,我們的項目開發中都會優先選擇不需要等待的非同步交互方式。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
(9)java非同步任務擴展閱讀:
同步是用於確保資源一次只能被一個線程使用的過程,同步對於單線程程序沒有任何好處。使用同步比非同步的性能差三到四倍。
線程都是獨立的,而且非同步執行,也就是說每個線程都包含了運行時所需要的數據或方法,而不需要外部的資源或方法,也不必關心其它線程的狀態或行為。但是經常有一些同時運行的線程需要共享數據,此時就需考慮其他線程的狀態和行為,否則就不能保證程序的運行結果的正確性。
需要做的是允許一個線程徹底完成其任務後,再允許下一個線程執行。必須保證一個共享的資源一次只能被一個線程使用。實現此目的的過程稱為同步。
同步對於單線程程序沒有任何好處。使用同步比非同步的性能差三到四倍。線程方法介紹:
構造函數:
Thread()
Thread(Runable target)
Thread(Runable target,String name)
Thread(ThreadGroup group,Runable target)
Thread(ThreadGroup group,Runable target,String name)
Thread(ThreadGroup group,String name)
⑩ java 如何實現非同步提交
Ajax,利用jQuery的ajaxform
第一步:先增加一個表單
<form id="myForm" action="comment.php" method="post">
Name: <input type="text" name="name" />
Comment: <textarea name="comment"></textarea>
<input type="submit" value="Submit Comment" />
</form>
第二步:jquery.js和form.js文件的包含
<head>
<script type="text/javascript" src="path/to/jquery.js"></script>
<script type="text/javascript" src="path/to/form.js"></script>
<script type="text/javascript">
// wait for the DOM to be loaded
$(document).ready(function() {
// bind 'myForm' and provide a simple callback function
$('#myForm').ajaxForm(function() {
alert("Thank you for your comment!");
});
});
</script>
</head>