Java多線程常用的幾個關鍵字
- java語言
- 關注:1.72W次
本文是本站小編搜索整理的關於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-hk/jsj/java/lwk9or.html