我目前正在通过数据报套接字/数据包使用 UDP 用 Java 构建多线程服务器/客户端。我很难理解线程的正确使用,并希望得到一些澄清。我将首先举例说明我在做什么。
Thread a;
Thread b(a);
a.start
b.start
//simple enough, now inside b imagine this,
Thread c(a);
if (case)
{
c.start //therefore I can have a lot of thread c's running at once,
}
//now inside c imagine this
if (case)
{
a.somefunction();
}
最终我的问题很难问,但上述 sudo 是否适合使用线程?即使一次只运行一个线程,它也可以同时从多个其他地方访问。这会导致问题吗?
感谢您的任何回复。
-威廉
只需添加一个编辑以进一步澄清。
线程 a 将是我的数据包发送者,它将数据包从服务器发送到客户端。线程 b 将是我的数据包侦听器,它从客户端接收数据包,并将它们发送到线程 C,数据包解析器。(所以我可以同时解析多个数据包)。数据包解析器线程 c 可能需要将响应发送回客户端,因此它将调用 a 中的函数,该函数将数据包排队等待发送。
再次感谢,
再次编辑,
使用函数的示例线程
package server;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Vector;
public class ServerSenderThread extends Thread
{
DatagramSocket serverSocket;
Vector<DatagramPacket> outGoingPackets = new Vector<DatagramPacket>();
public ServerSenderThread(DatagramSocket serverSocket)
{
this.serverSocket = serverSocket;
}
public void run()
{
while (true)
{
if (outGoingPackets.size() == 0)
{
try
{
Thread.sleep(50);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
else
{
try
{
send();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public void addSend(DatagramPacket packet)
{
outGoingPackets.addElement(packet);
}
public void send() throws IOException
{
DatagramPacket packet = outGoingPackets.get(0);
outGoingPackets.removeElementAt(0);
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] buf = new byte[256];
String dString = "Data Only the Server Knows";
buf = dString.getBytes();
packet = new DatagramPacket(buf, buf.length, address, port);
System.out.println("Sserver sending packet");
serverSocket.send(packet);
}
}