zoukankan      html  css  js  c++  java
  • 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);
    		}
    	}
    } 
    

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

  • 相关阅读:
    tcp/ip协议listen函数中backlog參数的含义
    oracle exp实例
    js21---单体(单例)模式
    js20---接口3种方式
    js19--继承终极版本
    js18--继承方式
    js17---创建对象:构造函数式和原型组合模式、动态原型模式、稳妥构造函数式
    js16--自定义原型对象
    js---15,模拟数组的ecah方法
    js14--原型2
  • 原文地址:https://www.cnblogs.com/LixiaoFeng1650062546/p/15534097.html
Copyright © 2011-2022 走看看