问题描述
publicclassCopyOfTestSys1extendsThread{Timert=newTimer();publicstaticvoidmain(String[]args){Threadthread1=newCopyOfTestSys1();Threadthread2=newCopyOfTestSys1();thread1.start();thread2.start();}@Overridepublicvoidrun(){t.add(Thread.currentThread().getName());}}publicclassTimer{privatestaticintnumber=0;//synchronized{};publicsynchronizedvoidadd(Stringname){number++;try{Thread.sleep(1);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(number);}}
解决方案
解决方案二:
publicclassCopyOfTestSys1extendsThread{Timert=newTimer();publicstaticvoidmain(String[]args){Threadthread1=newCopyOfTestSys1();Threadthread2=newCopyOfTestSys1();thread1.start();thread2.start();}@Overridepublicvoidrun(){t.add(Thread.currentThread().getName());}}publicclassTimer{privatestaticintnumber=0;//synchronized{};publicsynchronizedvoidadd(Stringname){number++;try{Thread.sleep(1);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(number);}}更多0
解决方案三:
你改了什么?
解决方案四:
你为什么提两个一样的问题?分多用不了?
解决方案五:
其实我想说的是这为什么会有线程安全的问题Timert=newTimer();publicstaticvoidmain(String[]args){Threadthread1=newCopyOfTestSys1();Threadthread2=newCopyOfTestSys1();thread1.start();thread2.start();
这不是new2个对象么。。。那timer不就是2个不同内存中的东西吗。。2个线程不共享啊。。。。
解决方案六:
用Timer类去实现Runnable接口吧,让后再只创建一个县城对象,里面传出2个Timer对象
解决方案七:
是两个内存中的东西但是你调用的是同一个方法啊加安全机制是保证两个线程访问该方法时有一个顺序
解决方案八:
你这个根本操作就是两个对象,何来同步。。。。publicclassCopyOfTestSys1extendsThread{privateTimert;publicCopyOfTestSys1(Timert){this.t=t;}publicstaticvoidmain(String[]args){Timert=newTimer();Threadthread1=newCopyOfTestSys1(t);Threadthread2=newCopyOfTestSys1(t);thread1.start();thread2.start();}@Overridepublicvoidrun(){t.add(Thread.currentThread().getName());}}publicclassTimer{privatestaticintnumber=0;//synchronized{};publicsynchronizedvoidadd(Stringname){number++;try{Thread.sleep(1);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(number);}}
就ok了
解决方案九:
给你理一理思路,你知道newCopyOfTestSys1();发生什么事情吗?两次newCopyOfTestSys1();各自new一个Timer实例,两个Timer实例对应一个静态的number;//以下回答你所问synchronized 加在成员方法上,这个锁属于各自的Timer实例,你要访问两个不同的资源,当然不会同步啦。解决:把add加static,但是run的方法要跟着改,不知道跟你的原意是否违背楼上的标准方案
解决方案十:
该回复于2014-09-22 08:48:00被版主删除