Java多線程常用的幾個關鍵字
本文是本站小編搜索整理的關於Java多線程常用的幾個關鍵字,供參考借鑑,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
一、同步(synchronized)和異步(asynchronized)
1、同步(synchronized)簡單説可以理解為共享的意思,如果資源不是共享的,就沒必要進行同步。設置共享資源為同步的話,可以避免一些髒讀情況。
2、異步(asynchronized)簡單説可以理解為獨立不受到其他任何制約。
舉個例子:
線程1調用了帶有synchronized關鍵字的方法methodA,線程2調用了異步方法methodB,出現的現象是同時控制枱輸出 t1,t2。
package ;
/**
* 多線程之對象同步鎖和異步鎖Demo
*
* @author ietree
*/
public class SynAndAsynDemo {
public static void main(String[] args) {
final SynAndAsynDemo mo = new SynAndAsynDemo();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
odA();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
odB();
}
},"t2");
t();
t();
}
// 方法A
public synchronized void methodA(){
try {
tln(entThread()ame());
// 休眠4秒
p(4000);
} catch (InterruptedException e) {
tStackTrace();
}
}
// 方法B
public void methodB(){
tln(entThread()ame());
}
}
線程1調用了帶有synchronized關鍵字的方法methodA,線程2調用了帶有synchronized關鍵字的方法methodB,出現的.現象是首先輸出t1,等待4秒之後再輸出t2。
package ;
/**
* 多線程之對象同步鎖和異步鎖Demo
*
* @author ietree
*/
public class SynAndAsynDemo {
public static void main(String[] args) {
final SynAndAsynDemo mo = new SynAndAsynDemo();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
odA();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
odB();
}
},"t2");
t();
t();
}
// 方法A
public synchronized void methodA(){
try {
tln(entThread()ame());
// 休眠4秒
p(4000);
} catch (InterruptedException e) {
tStackTrace();
}
}
// 方法B
public synchronized void methodB(){
tln(entThread()ame());
}
}
結論:
在第一段代碼中t1線程先持有object對象的Lock鎖,t2線程可以以異步的方式調用對象中的非synchronized修飾的方法,所以同時輸出;
在第二段代碼中t1線程先持有object對象的Lock鎖,t2線程如果在這個時候調用對象中的同步(synchronized)方法則需等待,也就是同步。
-
新手學習Java最高效的10個計劃
對於新手來説學習Java如同堵天書,下面是本站小編收集的關於新手學習Java最高效的10個計劃,希望可以為您的學習帶來幫助!計劃一:瞭解未來技術發展方向兩耳不聞窗外事,在如今是不合適的,尤其是在瞬息萬變的互聯網時代,作為一個開發者技術跟不上可以去專研,思想要跟不上,...
-
講述java中enum的用法
本文實例講述了java中enum的用法。分享給大家供大家參考。具體分析如下:1.基本用法複製代碼代碼如下:enumDay{SUNDAY,MONDAY,TUESDAY,WENDSDAY,THURSDAY,FRIDAY,SATURDAY;}枚舉是常量,所以應該用大寫。2.枚舉是對象枚舉隱含地繼承了,所以它具有的.屬性和方法。遍...
-
java中String和StringBuffer的區別
java中String和StringBuffer的區別String這個類是Java中使用得最頻繁的類之一,以下就是小編精心推薦java中String和StringBuffer的區別,希望對大家有幫助!看到這個講解的不錯,所以轉一下在java中有3個類來負責字符的操作。acter是進行單個字符操作的,ng對一串字符...
-
Java技術怎麼學習
對於很多隻會C語言的初學者而言,面對java基礎語法學習,反而感覺很難,其實其中最大的問題不是語法難,而是一種編程思想的轉變。怎麼學習才是正確的呢?下面是相關的知識,歡迎閲讀。1.概述學過一段時間的同學一定會覺得Java學習最頭疼的不是語法結構的繁雜,而是Java本身...