【发布时间】:2013-05-04 20:07:22
【问题描述】:
我遇到了一些异常,我需要知道程序何时自行关闭,因为我需要关闭套接字。
我有默认的公共静态 main 方法,我在其中不断重复一个动作和一个 Thread 类。
private static Thread thread;
public static boolean isRunning = true;
public static void main(String[] args){
thread = new Thread(new ThreadListenServer());
thread.start();
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run(){
// some action
}
}
timer.scheduleAtFixedRate(task, 0, 10000);
isRunning = false;
}
以及后台运行的线程类:
public class ThreadListenServer implements Runnable{
private DatagramSocket socket;
public ThreadListenServer() throws SocketException{
socket = new DatagramSocket(6655);
}
@Override
public void run() {
while(MainProgram.isRunning){
// some action
}
socket.close();
}
}
我不知道为什么,但isRunning 它正在变成假的,但它不应该。如果主程序已关闭,我应该如何关闭套接字? (这是因为即使程序关闭,线程仍然在后台运行)。
我正在考虑在主类中创建套接字,然后我将套接字对象作为参数传递给 ThreadClass,如果程序关闭,那么我也应该关闭套接字。
【问题讨论】:
-
当你关闭一个进程时,它会关闭它的所有资源,包括套接字。
-
它变成了假,因为你将它设置为假。
-
考虑使用执行器而不是单独的线程。完成后更容易重新获得控制权。
标签: java multithreading