java基础:线程同步

一:先看程序

看输出结果:

Thread-0,你是第2个使用Timer的线程Thread-1,你是第2个使用Timer的线程

结果明显有问题:

这是因为两个线程访问的是同一个Timer对象,其中一个线程调用Timer的add方法时,num++,这个时候,另外一个线程也有可能调用add方法,num又++,然后线程1输出,线程2输出,输出的是同一个num = 2

二:解决办法

add方法上加上synchronized关键字:public synchronized void add(String name){

或者在timer内部,执行代码块

synchronized(this){  num++;try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name + ",你是第" + num + "个使用Timer的线程");}

这两种方法,道理是一个的,都是实现锁定Timer对象。

战胜困难,走出困境,成功就会属于你。

java基础:线程同步

相关文章:

你感兴趣的文章:

标签云: