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); } } }
结果发现执行了第一次后,线程还会继续执行。