一:先看程序
看输出结果:
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对象。
时间: 2024-10-24 10:51:33