當前位置:學者齋 >

計算機 >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-mo/jsj/java/lwk9or.html