一:先看程序
看输出结果:
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对象。
战胜困难,走出困境,成功就会属于你。