java关于线程阻塞(长连接)问题

公司最近实现一个功能,关于客户端连接设备服务器。每个设备的ip都不同。

就想到了使用线程来实现。

想着接口比较牛逼的想法,果断的实现Runnable 接口。

因为连接都是长连接,所以案例需要长连接的实现(死循环)。

public class DeviceThread implement Runnable{

    @Override
    public void run() {
        while(true);
    }
}

  使用多线程。

public class DeviceTest{
	public static void main(String[] args) {
		for(int i=0;i<4;i++) {//循环创建线程
			DeviceThread t = new DeviceThread ();
			t.run();//使用run()方法会阻塞
			System.out.println(i);
		}
	}
} 

上面的结果就是只会执行一次。原因是第一次线程执行还没结束(线程阻塞)。

后来找到资料,使用线程的start()方法不会出现线程阻塞。只要执行了第一个线程,第二个线程就会跟着执行。很符合场景。

public class DeviceThread extends Thread {

    @Override
    public void run() {
        while(true);
    }
}

  线程使用:

public class DeviceTest{
	public static void main(String[] args) {
		for(int i=0;i<4;i++) {//循环创建线程
			DeviceThread t = new DeviceThread ();
			t.start();//使用run()方法不会阻塞
			System.out.println(i);
		}
	}
} 

  结果发现执行了第一次后,线程还会继续执行。

 

posted @ 2021-11-10 16:35  不希望有明天  阅读(259)  评论(0编辑  收藏  举报