02 多个线程多个锁

多个线程多个锁:多个线程都可以拿自己指定的锁,分别获得锁之后,执行synchronized方法题内容。

 

示例:

/**

 * 关键字synchronized获得的都是对象锁,而不是把一段代码(方法)当作锁,

 * 所以代码中哪个线程先执行synchronized关键字的方法,哪个对象持有该方法所属对象的锁

 * @author Vision_TXG

 *

 */

public class MyThread02 {

//注意加static和不加static的区别

private /*static*/ int num = 0;

public /*static*/ synchronized void printNum(String tag) {

try {

if(tag.equals("a")) {

num = 100;

System.out.println("tag a");

Thread.sleep(1000);

}else {

num  = 200;

System.out.println("tag b");

}

System.out.println("tag "+tag+" ,num = " + num);

}catch(Exception e) {

e.printStackTrace();

}

}

//注意观察run方法输出顺序

public static void main(String[] args) {

final MyThread02 m1 = new MyThread02();

final MyThread02 m2 = new MyThread02();

Thread t1 = new Thread(new Runnable() {

 

@Override

public void run() {

// TODO Auto-generated method stub

m1.printNum("a");

}

});

Thread t2 = new Thread(new Runnable() {

 

@Override

public void run() {

// TODO Auto-generated method stub

m2.printNum("b");

}

});

t1.start();

t2.start();

}  

}

 

 

示例总结:关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当作锁,所以示例代码中哪个线程先执行synchronized关键字的方法,哪个线程就是持有该方法所属的对象锁,两个对象,线程获得的就是两个不同的锁,他们互不影响。

有一种情况则是相同的锁,即在静态方法上加synchronized关键字,表示锁定class类,类一级别的锁(独占class类)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值