我正在尝试处理以级联方式传递给两个线程的两个队列的同步。所以我有两个线程,一个监听来自客户端的连接的 ServerThread,另一个是在服务器线程接受来自客户端的连接的情况下创建的 ConnectedThread。我不知道如何将这些队列的传递同步到 ConnectedThread 类的线程构造函数。我应该同步这些队列吗?而且我不知道什么是最佳做法。我试图通过以下方式做到这一点:
synchronized (this) {
new ConnectedThread(socket, inQueue, outQueue).start();
}
并通过:
synchronized (inQueue) {
synchronized (outQueue) {
new ConnectedThread(socket, inQueue, outQueue).start();
}
}
一切当然都在"run()"
ServerThread 类的 thread 方法中。
代码中的所有内容如下所示:
private class ServerThread extends Thread {
public ServerThread(int port, Queue<ThreadMessage> in,
Queue<ThreadMessage> out) throws Exception {
// TODO Auto-generated constructor stub
setName("ServerThread");
try {
server = new ServerSocket(port);
synchronized (in) {
synchronized (out) {
inQueue = in; outQueue = out;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
throw new Exception();
}
}
private ServerSocket server;
private Queue<ThreadMessage> inQueue, outQueue;
private boolean running = true;
@Override
public void run() {
// TODO Auto-generated method stub
while (running) {
try {
Socket socket = server.accept();
synchronized (inQueue) {
synchronized (outQueue) {
try {
new ConnectedThread(socket, inQueue, outQueue)
.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
SeverThread 类的线程是在同步方法中创建的。
public synchronized void startServer(int port, Queue<ThreadMessage> in,
Queue<ThreadMessage> out) throws Exception {
serverThread = new ServerThread(port, in, out);
serverThread.start();
}
任何建议如何以适当的方式处理它?
预先感谢。
PS对不起我的英语。PS 队列是LinkedList