震撼:多线程下的操作离不开synchronized
昨天在写一个聊天程序,在发送消息的时候是采用单独的一个线程,接收消息是在另一个线程中完成。
我在测试的过程中发现,有的时候当消息比较多时,比如:
当我刚刚发送完一条消息,这个时候要将我发送的消息添加到JTextPane元件中,刚好对方也发来一个消息,这个时间接收线程也将接收到的消息添加到了JTextPane元件,这就发生与线程“锁”有关的问题。
问题表现出的现象是,有的时候JTextPane无法正常显示消息内容,有的时候干脆就抛出元件内部的异常。
我当时也没想到是与线程有问,后来当我想到有可能与线程有关时,我在那个将消息添加到JtextPane中的两个方法:addMsg() 与 addReceiveMsg()前面加上synchronized 后,问题就没了。
显然,在使用多线程的时候,一定要注意,有时是必须要使用synchronized。
2007-04-17