我已经研究了Java近8个月了,我对于打断线程感到有些困惑。
我有一个JavaFX multiThreaded应用程序,它在tableview中显示连接的所有客户端(ip和端口等)。
当程序启动时,我输入端口号,然后按开始按钮,启动服务器类。
我有一个实现Runnable的serverclass,当客户端连接时,我创建了一个扩展Thread的客户端类对象。服务器和客户端类都有其运行方法:
public void run(){
while (!Thread.currentThread().isInterrupted()){
服务器创建一个这样的客户端:
new Thread(new Client(socket)).start();
我想知道的是,如果我创建一个停止按钮,它会调用服务器类中断服务器线程的方法,客户端线程也会自动中断吗?
我真正想要的是能够在不重新启动程序的情况下更改端口。当然,如果我换到另一个端口,我不希望线程在后台继续运行。
在这种情况下,我有哪些选择?如果您遗漏任何信息,请发表评论,我会立即修复。
答案 0 :(得分:2)
由于服务器和客户端位于不同的线程上,如果中断服务器线程,它将不会中断客户端线程。在其他线程中启动的线程独立于其父线程,因此如果父线程停止,则子线程可以继续运行。
Thread t = new Thread(new Runnable(){
new Thread(new Runnable(){
for(int i = 0; i < 1000; i++) System.out.println(i);
}).start;
}).start();
t.interrupt();
子线程应继续运行程序,因为它位于与父项不同的线程中。父线程的主要工作是启动子线程,如果它死了,孩子就会继续生活。