java 多线程 关键字_Java多线程常用的几个关键字

Java多线程常用的几个关键字

本文是百分网小编搜索整理的关于Java多线程常用的几个关键字,供参考借鉴,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!

一、同步(synchronized)和异步(asynchronized)

1、同步(synchronized)简单说可以理解为共享的意思,如果资源不是共享的,就没必要进行同步。设置共享资源为同步的话,可以避免一些脏读情况。

2、异步(asynchronized)简单说可以理解为独立不受到其他任何制约。

举个例子:

线程1调用了带有synchronized关键字的方法methodA,线程2调用了异步方法methodB,出现的现象是同时控制台输出 t1,t2。

package com.ietree.multithread.sync;

/**

* 多线程之对象同步锁和异步锁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() {

mo.methodA();

}

},"t1");

Thread t2 = new Thread(new Runnable() {

@Override

public void run() {

mo.methodB();

}

},"t2");

t1.start();

t2.start();

}

// 方法A

public synchronized void methodA(){

try {

System.out.println(Thread.currentThread().getName());

// 休眠4秒

Thread.sleep(4000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

// 方法B

public void methodB(){

System.out.println(Thread.currentThread().getName());

}

}

线程1调用了带有synchronized关键字的方法methodA,线程2调用了带有synchronized关键字的方法methodB,出现的.现象是首先输出t1,等待4秒之后再输出t2。

package com.ietree.multithread.sync;

/**

* 多线程之对象同步锁和异步锁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() {

mo.methodA();

}

},"t1");

Thread t2 = new Thread(new Runnable() {

@Override

public void run() {

mo.methodB();

}

},"t2");

t1.start();

t2.start();

}

// 方法A

public synchronized void methodA(){

try {

System.out.println(Thread.currentThread().getName());

// 休眠4秒

Thread.sleep(4000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

// 方法B

public synchronized void methodB(){

System.out.println(Thread.currentThread().getName());

}

}

结论:

在第一段代码中t1线程先持有object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法,所以同时输出;

在第二段代码中t1线程先持有object对象的Lock锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值