java同步和非同步
⑴ java中同步和非同步有什麼異同
Java中交互方式分為同步和非同步兩種,異同情況如下:
同步交互:指發送一個請求,需要等待返回,然後才能夠發送下一個請求,有個等待過程;
非同步交互:指發送一個請求,不需要等待返回,隨時可以再發送下一個請求,即不需要等待。區別:一個需要等待,一個不需要等待,在部分情況下,我們的項目開發中都會優先選擇不需要等待的非同步交互方式。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
(1)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中什麼同步什麼是非同步分別用在什麼地方
java同步指的是synchronized機制,而非synchronized的都是非同步,弄懂同步的概念就大致明白了兩者的差別。
有關同步:
synchronized用來修飾一個方法或者一個代碼塊,它用來保證在同一時刻最多隻有一個線程執行該段代碼。
一、當兩個並發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以後才能執行該代碼塊。
二、然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。
三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。
四、第三個例子同樣適用其它同步代碼塊。也就是說,當一個線程訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的對象鎖。結果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞。
五、以上規則對其它對象鎖同樣適用。
示例代碼:
public class Thread1 implements Runnable {
public void run() {
synchronized(this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);
}
}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t1, "B");
ta.start();
tb.start();
}
}
結果:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4
⑶ 在java中如何實現同步和非同步
同步和非同步一般是指多線程中對資源的訪問的。最簡單的例子是在多線程中對一個靜態整數進行遞增操作,然後在線程run方法上加synchronizied關鍵字試試。
⑷ Java 同步和 非同步 的區別,聯系
同步:請求狀態一致,數據狀態一致;頁面整體刷新,同步在後台處理結束後需要重新跳轉或轉發處理結果至前台,同步比較佔用資源,用戶體驗感較差。
非同步:請求狀態不一致,數據狀態一致;頁面局部刷新,非同步在後台處理結束後不需要跳轉或者轉發跳轉,只需要將處理後的結果傳送至前台即可,非同步佔用資源少,用戶體驗感較好。
聯系:都是從客戶端或瀏覽器向伺服器發送請求,然後伺服器接收請求,處理後將結果響應給客戶端前台。且都可以在請求中攜帶參數。
⑸ java中非同步處理和同步處理分別是什麼意思
同步:發送一個請求,等待返回,然後再發送下一個請求
非同步:發送一個請求,不等待返回,隨時可以再發送下一個請求
同步可以避免出現死鎖,讀臟數據的發生,一般共享某一資源的時候用,如果每個人都有修改許可權,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。
非同步則是可以提高效率了,現在cpu都是雙核,四核,非同步處理的話可以同時做多項工作,當然必須保證是可以並發處理的。
這些都是對的。
同步和非同步最大的區別就在於。一個需要等待,一個不需要等待。
比如廣播,就是一個非同步例子。發起者不關心接收者的狀態。不需要等待接收者的返回信息
電話,就是一個同步例子。發起者需要等待接收者,接通電話後,通信才開始。需要等待接收者的返回信息
⑹ java nio是同步還是非同步
非同步是為了同步
ava IO的各種流是阻塞的。這意味著,當一個線程調用read() 或 write()時,該線程被阻塞回,直到有一答些數據被讀取,或數據完全寫入。該線程在此期間不能再干任何事情了。 Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,但是它僅能得到目前可用的數據,如果目前沒有數據可用時,就什麼都不會獲取。而不是保持線程阻塞,所以直至數據變的可以讀取之前,該線程可以繼續做其他的事情。 非阻塞寫也是如此。一個線程請求寫入一些數據到某通道,但不需要等待它完全寫入,這個線程同時可以去做別的事情。 線程通常將非阻塞IO的空閑時間用於在其它通道上執行IO操作,所以一個單獨的線程現在可以管理多個輸入和輸出通道(channel)。
⑺ java中非同步處理和同步處理分別是什麼意思
舉個例子:來A和B一起從某點出發到自終點。
同步就是只能A走完某一段然後停下,讓B開始走一段再停下,再讓A走。如此往復。簡單理解就是,必須是一段程序執行完後才能執行後面的程序。
非同步就是,同一時間可能A和B同時都在往終點趕,此時不存在先後順序,就是說,兩個程序可以同時執行,稱為非同步。
⑻ Java中的線程同步與非同步如何理解
舉個例子:A和B一起從某點出發到終點。。
同步就是只能A走完某一段然後停下,讓B開始走一段再停下,再讓A走。。如此往復。簡單理解就是,必須是一段程序執行完後才能執行後面的程序。。
非同步就是,同一時間可能A和B同時都在往終點趕,此時不存在先後順序,就是說,兩個程序可以同時執行,稱為非同步。。
以上只是簡單理解。。
⑼ java同步和非同步的區別
首先同步和非同步這兩種概念和語言是沒有關系的,他們在不同的語言中都代表一樣的意思
同步: 是指你的操作只能一步一步執行完成之後才能呢個做下一個事情
businessMethodOne(); // 假設這個是同步的業務方法,並且執行時間要2秒
businessMethodTwo();
如上所示,businessMethodTwo必須等待2秒後才能執行
非同步: 非同步就是不阻塞後面的操作,即在上一個例子中,businessMethodTow不用等待就能立即執行