當前位置:學者齋 >

計算機 >java語言 >

Java多執行緒常用的幾個關鍵字

Java多執行緒常用的幾個關鍵字

本文是本站小編搜尋整理的關於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)方法則需等待,也就是同步。

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/java/lwk9or.html