各位大虾,小虾朋友们好,我第一次开发这个功能遇到一个问题,希望大家能帮帮我。具体内容如下:我现在从服务端不定时接收消息,就是有其他人说话我就能收到,我现在把所有收到的信息全部放入队列了,ConcurrentLinkedQueue,然后自己写了一个线程专门来把队列里面的消息逐一更新UI上面,现在问题就出现了,我更新的内容其实有很多是重复的,比如我消息的ID是1~100,界面上面的是1到100的随机值,比如1,3,5,30……99,100,出现60个,最后那40个全部都是99.我想应该是线程没有同步的问题,但是不知道怎么弄!!!请高手帮忙~~~
//网络层传有数据过来就自动调用此方法
@Override
public void receive(UserInfo info, int level) {
// TODO Auto-generated method stub
receiveQue.offer(info);//放入队列
if (onPause)
notification(info);
// handler.sendEmptyMessage(RECEIVE_MSG);
work.work();
}protected class Work extends Thread { public synchronized void work() {
notify();
} @Override
public synchronized void run() {
// TODO Auto-generated method stub
try {
while (true) {
if (receiveQue.size() > 0) {
UserInfo info = receiveQue.poll();
System.out.println(info.getMessage());
} else {
System.out.println("队列消息全部更新完毕,进入阻塞状态,除非有新消息过来!");
wait();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
// id:0 与服务器连接断开了,马上重新连接!
// 队列消息全部更新完毕,进入阻塞状态,除非有新消息过来!
// id:1 与服务器连接断开了,马上重新连接!
// 队列消息全部更新完毕,进入阻塞状态,除非有新消息过来!
// id:2 与服务器连接断开了,马上重新连接!
// 队列消息全部更新完毕,进入阻塞状态,除非有新消息过来!
......