简单线程同步问题,为什么synchronized没起作用?求助

问题描述

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被版主删除

时间: 2025-01-23 00:49:19

简单线程同步问题,为什么synchronized没起作用?求助的相关文章

银行取款[多线程]{使用重入锁Lock接口ReentrantLock锁确保线程同步}

经典例子:老婆(朱丽叶)老公(罗密欧),使用银行卡和存折,或者网银等,同时对同一账户操作的安全问题.  此处用多线程实现,同时取款的模拟实现,使用使用Lock接口ReentrantLock锁确保线程同步,查看取款安全隐患问题,代码如下: -----------------------------------------------------------------------------------------------------------------------------------

什么事线程同步?管理线程有哪些方法?都有什么作用?

问题描述 1.什么事线程同步?管理线程有哪些方法?都有什么作用? 解决方案 解决方案二:作业还是要自己做的解决方案三:作业还是要自己做的解决方案四:线程同步:使用synchronized关键字产生对象的互斥锁:sleepjoinyeildwaitnotifynotifyall解决方案五:线程同步:使用synchronized关键字产生对象的互斥锁,防止共享数据同一个时刻被两个以上的进程同时访问:管理线程的方法有sleepjoinyeildwaitnotifynotifyall解决方案六:把3.4

JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this

JAVA之旅(十三)--线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this 我们继续上个篇幅接着讲线程的知识点 一.线程的安全性 当我们开启四个窗口(线程)把票陆陆续续的卖完了之后,我们要反思一下,这里面有没有安全隐患呢?在实际情况中,这种事情我们是必须要去考虑安全问题的,那我们模拟一下错误 package com.lgl.hellojava; import javax.security.auth.callback.TextInputCallback

Java 线程同步 synchronized

先来看一个不带线程同步的例子,这个例子很简单,只是让两个线程输出同样的内容,并不做其他的事, 所以,线程同步在这里体现的并不明显. import java.util.Date; public class ThreadTest extends Thread{ int pauseTime; String name; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method s

关于线程同步synchronized的一个基础问题

问题描述 代码如下:class Counter {private static int count;//Object lock = new Object();public int getCount() {synchronized(Counter.class){return count++;}//synchronized(lock){//return count++;//}}}这个类用来生成序列号,测试发现:如果在 getCount方法上面用同步 public synchronized int g

Java多线程编程中synchronized线程同步的教程_java

0.关于线程同步 (1)为什么需要同步多线程?线程的同步是指让多个运行的线程在一起良好地协作,达到让多线程按要求合理地占用释放资源.我们采用Java中的同步代码块和同步方法达到这样的目的.比如这样的解决多线程无固定序执行的问题: public class TwoThreadTest { public static void main(String[] args) { Thread th1= new MyThread1(); Thread th2= new MyThread2(); th1.sta

线程同步-websphere synchronized方法 不起作用

问题描述 websphere synchronized方法 不起作用 webshpere中是不是不能用synchronized?还是需要进行配置 在Tomcat中synchronized是起作用的. 还请大神帮忙解答下 谢谢

银行存取款模型的线程同步问题

  关于线程同步,网上也有很多资料,不过不同的人理解也不大一样,最近在研究这个问题的时候回想起大学课本上的一个经典模型,即银行存取款模型,通过这个模型,我个人感觉解释起来还是比较清楚的.本文结合自己的思考对该模型进行一个简单的模拟,阐述一下我对线程同步的理解. 场景模拟   接下来使用java对该问题进行模拟.在研究这个问题时会忽略掉现实系统中的很多其他属性,通过一个最简单的余额问题来看线程同步,这里首先创建三个类. 1.卡类,同时卡类提供三个方法,获取余额.存款以及取款. public cla

MFC 多线程及线程同步

一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等.用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等.但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务. 在MFC中,一般用全局函数Afx