socket多线程无法close的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29726359/article/details/79343890

现在遇到一个情景,处理数据的代码运行在A线程里,在B线程里对A中的socket的accept进行close,结果每次都卡在accpet那里,无法close成功,因为在本线程中,socket可以正常关闭,但是如果在B线程来关闭A线程中的的socket,则会出现线程碰撞问题。
想了很久,找到一个可行的方法是,设置一个静态变量,用于充当锁,如果过关闭锁,socket在本线程关闭。在B线程中对开关进行开启控制。

  • A线程:
	if(Utils.openlock==true){
					if(socket!=null)socket.close();  
				
				}
  • B线程:
	new  Thread(new Runnable() {
					public void run() {
						System.out.println("进入开关按钮");
						 // openlock=true;
						Utils.openlock=true;
           						
							//System.out.println(serverSocket.isClosed());
							try {
								serverSocket.close();
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							System.out.println("1");
//							if (serverSocket.isClosed()) {
//								System.out.println("closed");
								btnNewButton_4.setEnabled(true);
                           
							//}
					}
				}).start();
  • 运行后,开关正常。如果更有更安全更简单的方法,可以相互学习。

猜你喜欢

转载自blog.csdn.net/qq_29726359/article/details/79343890