菜鸟求教synchronized 同步锁问题
服务器—客户机通讯问题
类Create 里有个方法,是个死循环,负责创建新的通讯线程
客户机A连接成功,创建一个新线程,专门用于和A通讯
客户机B连接成功,创建一个新线程,专门用于和B通讯
问题来了,
服务器这边某个类有个变量x,
接收到客户机A数据a则在线程里进行x+=a操作;
接收到客户机B数据b则在线程里进行x-=b操作;
服务器同时接收到A和B的数据a和b;
由于同时到达,而线程是独立的,所以同时对x进行操作,这显然出问题。
显然要用到同步锁,我是新手不会用,不知道要锁的对象是谁,
x是一个基本类型,显然不能锁x。求解啊,一下午看资料也搞不懂这个同步锁。
智力有限,求高手帮忙解决啊,越详细越好。
------解决方案--------------------锁方法
synchronized void addX( int a){
x += a;
}
接收到客户机A数据a则在A线程里进行addX(a)操作;
接收到客户机B数据b则在B线程里进行addX(-b)操作;
------解决方案--------------------如ls上所说,你只能给操作x的方法加上同步,这样效率会降低,但是也没别的办法。
------解决方案--------------------你锁你操作x这个变量的类方法啊;或者锁你操作x这个那个对象。
对了,如果用后者,那这个操作x变量的这个对象,在服务器必需只有一个,或都你把那个对象声明成static !
------解决方案--------------------你只能给操作x的方法加上同步,这样效率会降低,但是也没别的办法
------解决方案--------------------只有一个变量 volatile不行吗
------解决方案--------------------synchronized void addX( int a){
x += a;
}
------解决方案--------------------
------解决方案--------------------把X设为成员变量。
synchronized void setCount( int y){
x += y;
}
当A连接上传y=+a ;
当B连接上传y=-b;
------解决方案--------------------
------解决方案--------------------