Ⅰ java 非同步 意思
比如一些人要進入一個房間取東西,
同步就是一個人進去後先把門鎖上 取完出來。另一個人才能再進去...
非同步就是一個人進去取的同時,其他人也能進去取..
同步可以避免出現死鎖,一般共享某一資源的時候用,如果每個人都有修改許可權,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯。
Ⅱ Java消息服務的非同步消息收發
消息收發系統是非同步的,也就是說,JMS 客戶端可以發送消息而不必等待回應。比較可知,這完全不同於基於 RPC 的(基於遠程過程的)系統,如 EJB 1.1、CORBA 和 Java RMI 的引用實現。在 RPC 中,客戶機調用伺服器上某個分布式對象的一個方法。在方法調用返回之前,該客戶機被阻塞;該客戶機在可以執行下一條指令之前,必須等待方法調用結束。在 JMS 中,客戶機將消息發送給一個虛擬通道(主題或隊列),而其它 JMS 客戶機則預訂或監聽這個虛擬通道。當 JMS 客戶機發送消息時,它並不等待回應。它執行發送操作,然後繼續執行下一條指令。消息可能最終轉發到一個或許多個客戶機,這些客戶機都不需要作出回應。
JMS 的通用介面集合以非同步方式發送或接收消息。非同步方式接收消息顯然是使用間斷網路連接的客戶機,諸如行動電話和PDA的最好的選擇。另外, JMS 採用一種寬松結合方式整合企業系統的方法,其主要的目的就是創建能夠使用跨平台數據信息的、可移植的企業級應用程序,而把開發人力解放出來。
Ⅲ java的非同步通信是個什麼概念
非同步通信是一種很常用的通信方式。相對於同步通信,非同步通信在發送字元時,所發送的字元之間的時隙可以是任意的,當然,接收端必須時刻做好接收的准備(如果接收端主機的電源都沒有加上,那麼發送端發送字元就沒有意義,因為接收端根本無法接收)。發送端可以在任意時刻開始發送字元,因此必須在每一個字元的開始和結束的地方加上標志,即加上開始位和停止位,以便使接收端能夠正確地將每一個字元接收下來。內部處理器在完成了相應的操作後,通過一個回調的機制,以便通知發送端發送的字元已經得到了回復。
Ⅳ java中非同步處理和同步處理分別是什麼意思
舉個例子:A和B一起從某點出發到終點。
同步就是只能A走完某一段然後停下,讓B開始走一段再停下,再讓A走。如此往復。簡單理解就是,必須是一段程序執行完後才能執行後面的程序。
非同步就是,同一時間可能A和B同時都在往終點趕,此時不存在先後順序,就是說,兩個程序可以同時執行,稱為非同步。
Ⅳ java如何實現線程非同步
Thread t=new Thread(){
public void run(){
//保存信息操作
}
}
t.start();
//同時做別的事情.
Ⅵ java怎麼同步發送及非同步發送簡訊例子解析
發送簡訊的介面
根據自己的情況選擇服務商。
開發文檔
從開發文檔中我們可以看到. 可以直接使用http請求也可以使用WebService請求發送簡訊. 由於DEMO文件夾下的java和jsp文件夾中的代碼都是使用http請求發送簡訊. 所以這里就不再細說了, 我們使用WebService的方式演示發送簡訊.
生成客戶端代碼
從介面文檔中我們知道它的WebService的WSDL的url為:http://106.ihuyi.cn/webservice/sms.php?WSDL那麼我們可以執行下面的命令生成客戶端代碼:
wsimport -keep http://106.ihuyi.cn/webservice/sms.php?WSDL
其中wsimport是JDK自帶的工具, -keep url選項是"保留生成的文件". 該命令會在當前目錄下生成sms.cn.ihuyi._106包, 以及眾多的類. 接下來開始編寫我們自己的代碼.
定義介面
為了方便, 這里我們首先定義一個介面:
Sms.java
publicinterfaceSms{
/**
*向mobile發送簡訊,內容為message
*
*@parammobile手機號
*@parammessage簡訊內容
*@return成功返回-1,否則返回其他值
*/
intsendMessage(Stringmobile,Stringmessage);
}
這個介面很簡單, 只有一個方法. 這個方法用來發送簡訊.
同步發送簡訊
接下來我們首先實現一個同步發送簡訊的類:
IhuyiSmsImpl.java
{
privateStringaccount;
privateStringpassword;
publicvoidsetAccount(Stringaccount){
this.account=account;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
@Override
publicintsendMessage(Stringmobile,Stringmessage){
cn.ihuyi._106.Smsfactory=newcn.ihuyi._106.Sms();
SmsSoapsmsSoap=factory.getSmsSoap();
SubmitResultsubmit=smsSoap.submit(account,password,mobile,message);
intcode=submit.getCode();
if(code==2){
return-1;
}
System.out.println("發送簡訊失敗,code:"+code);
returncode;
}
}
非同步發送簡訊
由於發送簡訊涉及到網路通信, 因此sendMessage方法可能會有一些延遲. 為了改善用戶體驗, 我們可以使用非同步發送簡訊的方法. 原理很簡單: 如果用戶請求發送簡訊, 我們不是直接調用IhuyiSmsImpl的sendMessage方法, 而是將請求保存起來(生產者), 然後告訴用戶: 簡訊發送成功. 之後有若干個消費者取出任務, 調用sendMessage方法發送簡訊.
這里, 我使用線程池完成上面的任務:
AsyncSmsImpl.java
{
publicSmssendSms;
=Executors.newFixedThreadPool(3);
publicvoidsetSendSms(SmssendSms){
this.sendSms=sendSms;
}
@Override
publicintsendMessage(Stringmobile,Stringmessage){
try{
executorService.submit(()->sendSms.sendMessage(mobile,message));
}
catch(Exceptione){
Sysemt.out.println("提交任務時發生錯誤"+e);
return0;
}
return-1;
}
publicvoiddestroy(){
try{
executorService.shutdown();
}
catch(Exceptione){}
}
}
在第17行, 我們獲得遠程對象的一個代理對象. 之後就可以通過這個代理對象進行發送簡訊, 查詢賬戶余額等操作.
第18行, 使用該代理對象的submit方法提交了簡訊內容. 該方法的參數信息及返回值含義在介面文檔中有詳細的說明.
第19行我們獲得了結果的狀態碼. 根據文檔上的說明, 狀態碼為2說明提交成功. 簡單起見, 這里我們只關注提交成功的情況. 需要注意的是, 狀態碼為2隻是說明提交成功. 根據官網上的"3-5秒內響應、100%到達", 我們可以推測. 如果提交成功, 那麼基本上3-5秒內,簡訊就會發送成功, 根據用戶的網路情況, 可能稍有延遲用戶就可以收到簡訊.
使用這段代碼發送簡訊也很簡單, 直接new一個對象, 設置好賬號和密碼就可以發送簡訊了.
代碼很簡單, 直接將Sms介面的sendMessage(mobile, message)方法作為一個任務加到線程池的任務隊列中. 這樣等到有空閑線程時, 就會執行sendSms.sendMessage(mobile, message)發送簡訊. 這里我們假設只要保存到線程池就可以成功發送簡訊. 因為發送失敗的情況實際上很罕見.
Ⅶ java非同步方法什麼意思
在JAVA平台,實現非同步調用的角色有如下三個角色:調用者,取貨憑證,真實數據
非同步調用就是:一個調用者在調用耗時操作,不能立即返回數據時,先返回一個取貨憑證.然後在過一斷時間後憑取貨憑證來獲取真正的數據.
如果數據將在線程間共享。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用非同步編程,在很多情況下採用非同步途徑往往更有效率
只有一個馬桶
很多人上廁所
要排隊
這叫同步迅雷一次可以下載很多東西
這叫非同步
Ⅷ java非同步請求有哪幾種類型的返回結果
同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事
非同步: 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢
同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。
非同步就是你叫我,然後自己去吃飯,我得到消息後可能立即走,也可能等到下班才去吃飯。
所以,要我請你吃飯就用同步的方法,要請我吃飯就用非同步的方法,這樣你可以省錢。