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/jsj/java/lwk9or.html