JavaSE第一百零二讲:synchronized关键字常见陷阱深度剖析

   上一讲内容中我们讲到了synchronized关键字的用途,这一讲我们详细对这个关键字的用法进行详细讲解

1. synchronized关键如果有static关键字修饰会是什么状况呢?注意加上static之后就是静态方法,它不属于任何对象,它是属于所在类的本身的。针对上一讲的程序ThreadTest4.java

  修改这一个程序,在execute2()方法前面加static关键字如下所示:

package com.ahuier.Thread;

public class ThreadTest4 {
	public static void main(String[] args) {
		Example example = new Example();
		Thread t1 = new TheThread(example);
	//	example = new Example();
		Thread t2 = new TheThread2(example);
		t1.start();
		t2.start();
	}
}
class Example{
	public synchronized void execute(){
		for(int i = 0; i < 20; i++){
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("example: " + i);
		}
	}
	
	public synchronized static void execute2(){
		for(int i = 0; i < 20; i++){
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("hello: " + i);
		}
	}
}

class TheThread extends Thread{
	
	private Example example;
	public TheThread(Example example){
		this.example = example;
	}
	@Override
	public void run() {
		this.example.execute();
	}
}
class TheThread2 extends Thread{
	
	private Example example;
	public TheThread2(Example example){
		this.example = example;
	}
	@Override
	public void run() {
		this.example.execute2();
	}
}
编译执行结果是两个线程同时交替输出 0 - 19。

【说明】:这个程序与之前的程序的区别是里面的方法加上了static关键字,此时static关键字加上去之后,为什么synchronized关键字的功能不起作用了呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值