关于基于UDP的多线程网络编程中的packet锁死的问题

本文介绍了一种解决UDP Socket接收数据时导致对象锁死的问题方法。通过在循环中不断创建新的DatagramPacket对象,避免了主线程锁死对象而导致子线程无法访问的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:socket.receive(packet)会锁死对象packet,主线程锁死packet对象后,在start()的子线程中不能调用  packet.属性,packet.方法()。

解决办法:

while(true){ 

    byte[] data=new byte[1024];//创建字节数组,指定接受的数据包的大小

    DatagramPacket packet=new DatagramPacket(data, data.length);

    socket.receive(packet);//此方法在接受到数据之前会一直阻塞

    UDPServerThread serverThread=new UDPServerThread(socket,apcket,data);

    

    serverThread.start();

}

这样在while循环到第二次时,new了一个新的packet对象,主线程锁住新对象,上一次的对象自动解锁,上一次循环时新建的子线程中的对packet进行调用的方法才可以开始执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值