【多线程】--线程同步

  熟悉多线程的都知道,传统的线程同步时,可以使用synchronized机制来实现,现在就具体的说一下这个synchronized的使用方法。

  1、只锁住部分代码    

synchronized (this) {
	for (int i = 0; i < length; i++) {
		System.out.print(name.charAt(i));
	}
	}
   在调用执行循环时,使用锁进行控制。这里需要注意参数this,表示当前调用对象,必须保持同步调用时的对象一致。


  2、锁住整个方法:    

public synchronized void output2(String name) {
   XXXX
}
   需要注意的地方是,当锁住方法时,如果使用了static静态变量,如果与不使用static的方法实现同步,要保证调用对象一致:使用加载字节码的方式,如下:     

public void output1(String name) {
	int length = name.length();	
	    synchronized (Outputer.class) {
		for (int i = 0; i < length; i++) {
			System.out.print(name.charAt(i));
		}
		}
		System.out.println();
	}

	public static synchronized void output3(String name) {
		int length = name.length();
		for (int i = 0; i < length; i++) {
			System.out.print(name.charAt(i));
		}
		System.out.println();
	}
    上述两方法中,第二个使用了static,加载调用对象时是从静态变量的字节码加载,所以第一种方法要想与第二种保持同步,也必须从字节码中加载,即使用了类名.class来实现。

转载于:https://www.cnblogs.com/victor-grace/p/7253621.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值