java实现简单聊天程序(集合,线程,I/O,网络编程)

本文介绍了使用Java实现的简单聊天程序,涉及集合、线程、I/O和网络编程。作者注意到线程安全问题,特别是在服务器端使用Vector避免了并发问题。程序虽然基于Swing创建界面,但仍有提升空间。文章还讨论了ArrayList的扩容问题和synchronized关键字在确保线程安全中的作用。
摘要由CSDN通过智能技术生成

这半个月的大作业,程序有一些不完善的地方有待提高,但是基本的聊天室功能已经可以实现

还没有接触javaFx所以用了swing做了简陋的界面


 

补充:{

今天突然记起来,把这个大作业交了,然后大佬突然问我这个程序有没有线程安全问题,怎么处理的。
我以为这只是把socket传入的字节重新传到客户端不存在修改也不存在线程的安全问题,大佬说只要有多个线程共享的数据,就有可能有线程安全问题!!!切记
我恰好在服务器端用了vector集合存储了线程,所以避免了安全性问题,但是如果用了其他的容器还是会出现线程安全问题。
例如,ArrayList里,容量是有一个上限的,在当前容量已满的情况下,会进行扩容,先判断是否达到容量上限,如果没有,就将进行扩容,如果达到则会报异常。
如果没有给线程上锁,当有两个对象同时加入ArrayList里且容量只够再一次扩容时,会爆内存。
而使用vector则没有这种担忧,看过vector源码的API就会知道,vector的实现方法都用synchronized包装了。
synchronized:
这是java语言的关键字,被它修饰的方法或代码块在执行的时候能够保证在同一时刻最多只有一个线程执行该段代码,相当于一个上锁的操作。

}

 

截图:

 

 

 

客户端:

 

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEven
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值