以下代码是我的应用程序中的服务器代码:
private int serverPort;
private Thread serverThread = null;
public void networkListen(int port){
serverPort = port;
if (serverThread == null){
Runnable serverRunnable = new ServerRunnable();
serverThread = new Thread(serverRunnable);
serverThread.start();
} else {
}
}
public class ServerRunnable implements Runnable {
public void run(){
try {
//networkConnected = false;
//netMessage = "Listening for Connection";
//networkMessage = new NetworkMessage(networkConnected, netMessage);
//setChanged();
//notifyObservers(networkMessage);
ServerSocket serverSocket = new ServerSocket(serverPort, backlog);
commSocket = serverSocket.accept();
serverSocket.close();
serverSocket = null;
//networkConnected = true;
//netMessage = "Connected: …Run Code Online (Sandbox Code Playgroud) 在我的服务器应用程序的某些时候,我想停止一些执行I/O阻塞操作的线程.
例如,其中一个有以下run()方法:
public void run() {
System.out.println("GWsocket thread running");
int len;
byte [] buffer = new byte[1500];
try {
this.in = new DataInputStream(this.socket.getInputStream());
this.out = new DataOutputStream(this.socket.getOutputStream());
running = true;
while (running){
len = in.read (buffer);
if (len < 0)
running = false;
else
parsepacket (buffer, len);
}
}catch (IOException ex) {
System.out.println("GWsocket catch IOException: "+ex);
}finally{
try {
System.out.println("Closing GWsocket");
fireSocketClosure();
in.close();
out.close();
socket.close();
}catch (IOException ex) {
System.out.println("GWsocket finally IOException: "+ex);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想停止运行此代码的线程,我该怎么办?
我正在创建一个客户端 - 服务器应用程序,用户可以从gui打开或关闭服务器; 为了让它工作,我使用SwingWorker嵌套类.所有似乎都正常工作,但当我关闭服务器并重新打开它不起作用,可能是因为还有另一个打开的实例无法覆盖:服务器在accept()上被阻止方法.当用户按下开关按钮时,我想杀死前一个实例,但我不知道如何.
这是给我带来问题的SwingWorker类:
class SwingWorkGUI extends SwingWorker
{
@Override
protected Integer doInBackground() throws Exception {
int delay = 1000;
final Timer time = new Timer(delay, null);
time.addActionListener( new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Server.up == true){
upTimeMillis += 1000;
long diff = upTimeMillis/1000;
long numHrs = diff/60;
diff = diff%60;
long numMins = diff/60;
long numSecs = diff%60;
upTime.setText(numHrs + ":" + numMins + ":" + numSecs);
}
else {
upTime.setText("Server Actually Down");
time.stop(); …Run Code Online (Sandbox Code Playgroud) 是否存在OS便携式中断阻塞的方法accept?我有一个多线程守护进程/服务,当deamon/service获得关闭信号时,需要正常关闭所有侦听网络主机.我看到有人说你应该使用非阻塞套接字或选择超时 - 但这些会不会降低性能,因为我的应用程序应尽可能快?守护进程在主线程中运行,而每个侦听网络主机都在自己的线程中运行.现在的问题是,accept如果侦听网络主机的套接字上没有网络流量,则无限期地等待.如果我应该使用信号,那么有一个使用信号中断的例子accept吗?