2 xsx127 XSX127 于 2015.07.22 10:29 提问

java队列请教,大神快来指点下

我socket服务器与客户端通信,使用BlockQueue来实现生产和消费

这个语句是在已连接客户端列表中查找已选择的客户端,并获取这个客户端的发送队列,将发送文本框的数据发送到BlockQueue中,也就是数据的生产者
for (StreamFactory currentStream : myMainFram.myStreamFactory) {

            if(currentStream.getDescsString().equals(ClientListJPanel.getItemAt(myServer.getSelectedClient()))){

                byte[] temp = NetSendArea.getText().getBytes();

                for (byte a : temp) {

                    try {       

                        currentStream.getMybBlockQueueTool().getTxQueue().put(a);;

                    } catch (InterruptedException e) {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                    }

                    System.out.println("原数据"+a);

                }

            }

        }

这个客户端里面的线程,读取发送队列是不是有数据,如果有,用这个客户端的IO流发送数据
while(true){

            Byte temp = null;

            try {

                temp = myBlockQueueTool.getTxQueue().poll(10, TimeUnit.MILLISECONDS);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            if(temp != null){

                System.out.println(temp.byteValue());

                try {

                    myiInOutPutStream.getMyoutputStream().write(temp.byteValue());

                } catch (IOException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }



            }

            else {

                break;

            }

        }

现在现象是,我在发送文本框输入“张雄”,这俩汉字内码是
张 D5C5 雄D0DB

程序打印的数据:
不正常的时候

原数据-43
-43
原数据-59
原数据-48
原数据-37
-48
-37
-59

正常的时候
原数据-43
原数据-59
原数据-48
原数据-37
-43
-59
-48
-37

queue好像是线程安全的,为什么会出现这个现象,从队列读取的数据顺序不是我放进去的顺序,导致发送出去的汉字不对

2个回答

CSDNXIAOD
CSDNXIAOD   2015.07.22 10:33

java自定义ArrayList排序, 大神略过
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

caozhy
caozhy   Ds   Rxr 2015.07.22 13:24

你是加锁了,但是你只同步了单个的字符,而没有将他们视作整体。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
请教别人与指点别人
无论工作与学习, 都会遇到这个问题。  先从一个小故事讲起吧。 某人问神父, 为啥每次讲教义时, 都先从一个故事讲起, 为啥不直接讲教义的内容。 神父说:一枚果子, 你是想自己吃呢, 还是我嚼过了再喂你吃? 以前上大学时, 宿舍里的哥们除我之外, 几乎个个都是魔兽迷, 游戏玩的疯狂。 到了考试前一两天, 傻了, 赶快跑自习室赶快看老师划的重点。 其中一个私下里跟我说, 为啥不帮他们复习,
java题库8
1. 一个没有实现Serializable接口的父类,编写一个能够序列化的子类 ,只要父类实现了序列化的接口,或者,子类实现了序列化的接口就可以序列化 “transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。 打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安
新手入门,学习java从小白到大神应该从何做起?
编程入门先学什么?关于编程,关于编程的基础语言,想要学习的朋友,一定会多多少少了解一些。像 C、C++、Python和Java四种都是通用的编程语言,而JavaScript和PHP算是Web环境的专用编程语言。但其实,编程的语言有很多种,想要入门编程,要学习的编程语言也很多。在这里我就简单总结下编程入门的一系列学习方法。        上面我们提到,学习编程的语言有很多种,像C、C++、Pyth
socket通信 未完成
一个使用java的简单的socket通信程序 未完成 希望大神指点
Java并发大神Doug Lee同步队列论文
Java并发大神Doug Lee同步队列论文
java压缩上传图片的工具方法
java上传图片的压缩方法,只是一个初入java的小白的一些简单积累。还望各个大神指点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ThreeLayerLib源代码
ThreeLayerLib.dll的源代码,请各位大神多多指点其中存在的问题,不胜感激,再次感谢各位大神对在下的关注和指点!
java结点类
java链表操作的基本单元-结点类的定义,包括数据域和指针域,望大神们指点
java版线程读者优先写者优先问题
初学者写的java版线程读者优先写者优先问题,欢迎各位大神指点~~
真诚请教专家指点
问专家: 我现在面临的问题是关于怎样处理关机脚本的问题。首先我的最终目的是:在关机或者是重起机器的时候,计算机执行关机脚本任务而这个任务是执行另外的一个程序,就是要从计算机远端拷贝文件过来(我把这个程序用exe文件实现),我写的简明批处里是:@echo offstart /wait a.execls(注明:上面的简单批处理在xp/2k下都能通过)后来我通过组策略,将上面的批处理保存为c.bat添进