精华内容
下载资源
问答
  • 主要介绍了java httpclient设置超时时间和代理的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Socket Java设置超时时间

    万次阅读 2016-12-09 10:45:16
    Socket JavaSocket Client Example// File Name GreetingClient.java import java.net.*; import java.io.*;public class GreetingClient { public static void main(String [] args) { String serverName =

    #Socket Java设置超时时间

    Socket Client Example

    // File Name GreetingClient.java
    import java.net.*;
    import java.io.*;
    
    public class GreetingClient {
    
       public static void main(String [] args) {
          String serverName = args[0];
          int port = Integer.parseInt(args[1]);
          try {
             System.out.println("Connecting to " + serverName + " on port " + port);
             Socket client = new Socket(serverName, port);
             
             System.out.println("Just connected to " + client.getRemoteSocketAddress());
             OutputStream outToServer = client.getOutputStream();
             DataOutputStream out = new DataOutputStream(outToServer);
             
             out.writeUTF("Hello from " + client.getLocalSocketAddress());
             InputStream inFromServer = client.getInputStream();
             DataInputStream in = new DataInputStream(inFromServer);
             
             System.out.println("Server says " + in.readUTF());
             client.close();
          }catch(IOException e) {
             e.printStackTrace();
          }
       }
    }
    

    Socket Server Example
    连接端口自定义,通过arg设置

    // File Name GreetingServer.java
    import java.net.*;
    import java.io.*;
    
    public class GreetingServer extends Thread {
       private ServerSocket serverSocket;
       
       public GreetingServer(int port) throws IOException {
          serverSocket = new ServerSocket(port);
          serverSocket.setSoTimeout(10000);
       }
    
       public void run() {
          while(true) {
             try {
                System.out.println("Waiting for client on port " + 
                   serverSocket.getLocalPort() + "...");
                Socket server = serverSocket.accept();
                
                System.out.println("Just connected to " + server.getRemoteSocketAddress());
                DataInputStream in = new DataInputStream(server.getInputStream());
                
                System.out.println(in.readUTF());
                DataOutputStream out = new DataOutputStream(server.getOutputStream());
                out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
                   + "\nGoodbye!");
                server.close();
                
             }catch(SocketTimeoutException s) {
                System.out.println("Socket timed out!");
                break;
             }catch(IOException e) {
                e.printStackTrace();
                break;
             }
          }
       }
       
       public static void main(String [] args) {
          int port = Integer.parseInt(args[0]);
          try {
             Thread t = new GreetingServer(port);
             t.start();
          }catch(IOException e) {
             e.printStackTrace();
          }
       }
    }
    

    设置超时
    1.设置连接请求超时时间,如果连接无响应,则抛出超时异常
    2.设置读操作超时时长,如过读取数据流时间超时,则抛出异常

    Socket socket = new Socket();
    socket.connect(new InetSocketAddress(ipAddress, port), 1000);//设置连接请求超时时间1 s
    socket.setSoTimeout(30000);//设置读操作超时时间30 s
    

    注意:socket.setSoTimeout必须在connect之后设置,不然将不会生效。读操作将永远不会超时。


    参考:
    https://www.tutorialspoint.com/java/java_networking.htm
    http://stackoverflow.com/questions/4969760/set-timeout-for-socket
    http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html

    展开全文
  • 之前在使用Java实现熔断降级组件的时候,需要实现接口请求的超时中断,通过查找相关资料了解了相关的方法,下面这篇文章主要给大家介绍了关于Java中实现线程的超时中断的相关资料,需要的朋友可以参考下
  • java超时取消正则表达式匹配方法,代码超时处理,设置代码执行时间,超棒的工具类 lambda,Callable,ExecutorService,超过执行5秒退出
  • 主要给大家介绍了关于Java网络编程教程之设置请求超时的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • java设置超时限制

    千次阅读 2018-01-29 16:16:44
     //limi是设置的时间限制 单位:毫秒  state = future.get(limi, TimeUnit.MILLISECONDS);   } catch (InterruptedException e) {   // 中断线程  e.printStackTrace();   } catch ...
    	public static String limi(String net,String iden,int limi){
    		String state ="";
    		ExecutorService executor = null;
    		 FutureTask<String> future = null;
    		  try { 
    		 executor = Executors.newSingleThreadExecutor();  
    	       future = new FutureTask<String>(new Callable<String>() {
    				@Override
    				public String call() throws Exception {	
    					if (useable(net)>0) {
    						return ;
    					}else {
    						return "无效";
    					}
    		                  
    				}
    			});  
    	        executor.execute(future);  
    	       //limi是设置的时间限制  单位:毫秒
    	            state = future.get(limi, TimeUnit.MILLISECONDS);   
    	        } catch (InterruptedException e) {  
    	            // 中断线程
    	            e.printStackTrace();  
    	        } catch (ExecutionException e) {  
    	            // TODO Auto-generated catch block  
    	            e.printStackTrace();  
    	        } catch (TimeoutException e) {  
    	            state ="超时";
    	            e.printStackTrace();  
    	        }finally{  
    	            future.cancel(true);  
    	            executor.shutdown();     
    	        } 
    		
    		return state;	
    	}
    

    展开全文
  • 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索"java get connection 超时"答案上, 但始终找不到答案, 偶然尝试了下"java 设置超时" 问题就迎刃而解了. ...

    最近有个需求, 当DB压力过大时获取Connction的时间过慢长时间不返回的话, 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索"java get connection 超时"答案上, 但始终找不到答案, 偶然尝试了下"java 设置超时" 问题就迎刃而解了. 

    java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满足这个需求。Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。 
    看来不能一直纠结在一条道上, 偶尔换个思路还是很有帮助的,  不多说了, 解决方案如下 

    public boolean checkDBStatus() {  
        boolean bdStatus = false;  
      
        final ExecutorService exec = Executors.newFixedThreadPool(1);  
        Callable<String> call = new Callable<String>() {  
            public String call() throws Exception {  
                DataSource dataSource = getJdbcTemplate().getDataSource();  
                Connection connection = dataSource.getConnection();  
                Statement statement = connection.createStatement();  
                statement.executeQuery("select * from citirisk_menu_node");  
                return "true";  
            }  
        };  
      
        try {  
            Future<String> future = exec.submit(call);  
            // set db connection timeout to 10 seconds  
            String obj = future.get(1000 * 10, TimeUnit.MILLISECONDS);   
            bdStatus = Boolean.parseBoolean(obj);  
            System.out.println("the return value from call is :" + obj);  
        } catch (TimeoutException ex) {  
            System.out.println("====================task time out===============");  
            ex.printStackTrace();  
            bdStatus = false;  
        } catch (Exception e) {  
            System.out.println("failed to handle.");  
            e.printStackTrace();  
            bdStatus = false;  
        }  
        // close thread pool  
        exec.shutdown();  
      
        return bdStatus;  
    }  



    在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。 

    Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。 

    Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程序执行超时的关键。 

    Future接口是一个泛型接口,严格的格式应该是Future<V>,其中V代表了Future执行的任务返回值的类型。 Future接口的方法介绍如下: 

        boolean cancel (boolean mayInterruptIfRunning) 取消任务的执行。参数指定是否立即中断任务执行,或者等等任务结束 
        boolean isCancelled () 任务是否已经取消,任务正常完成前将其取消,则返回 true 
        boolean isDone () 任务是否已经完成。需要注意的是如果任务正常终止、异常或取消,都将返回true 
        V get () throws InterruptedException, ExecutionException  等待任务执行结束,然后获得V类型的结果。InterruptedException 线程被中断异常, ExecutionException任务执行异常,如果任务被取消,还会抛出CancellationException 
        V get (long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 同上面的get功能一样,多了设置超时时间。参数timeout指定超时时间,uint指定时间的单位,在枚举类TimeUnit中有相关的定义。如果计算超时,将抛出TimeoutException 

    Future的实现类有java.util.concurrent.FutureTask<V>即 javax.swing.SwingWorker<T,V>。通常使用FutureTask来处理我们的任务。FutureTask类同时又实现了Runnable接口,所以可以直接提交给Executor执行。使用FutureTask实现超时执行的代码如下: 

    ExecutorService executor = Executors.newSingleThreadExecutor();    
    FutureTask<String> future =    
           new FutureTask<String>(new Callable<String>() {//使用Callable接口作为构造参数    
             public String call() {    
               //真正的任务在这里执行,这里的返回值类型为String,可以为任意类型    
           }});    
    executor.execute(future);    
    //在这里可以做别的任何事情    
    try {    
        result = future.get(5000, TimeUnit.MILLISECONDS); //取得结果,同时设置超时执行时间为5秒。同样可以用future.get(),不设置执行超时时间取得结果    
    } catch (InterruptedException e) {    
        futureTask.cancel(true);    
    } catch (ExecutionException e) {    
        futureTask.cancel(true);    
    } catch (TimeoutException e) {    
        futureTask.cancel(true);    
    } finally {    
        executor.shutdown();    
    }    

    不直接构造Future对象,也可以使用ExecutorService.submit方法来获得Future对象,submit方法即支持以 Callable接口类型,也支持Runnable接口作为参数,具有很大的灵活性。使用示例如下: 

    ExecutorService executor = Executors.newSingleThreadExecutor();    
    FutureTask<String> future = executor.submit(    
       new Callable<String>() {//使用Callable接口作为构造参数    
           public String call() {    
          //真正的任务在这里执行,这里的返回值类型为String,可以为任意类型    
       }});    
    //在这里可以做别的任何事情    
    //同上面取得结果的代码    

     

    展开全文
  • Java给方法设置超时

    千次阅读 2019-05-18 15:09:53
    package ... ...... import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTas...
    package com.sfpay.console.util;
    
    ......
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.FutureTask;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;
    ......
    
    /**
     * 类说明:<br>
     * 临时数据提取模块Handler
     * <p>
     * 详细描述:<br>
     * Common Util
     * </p>
     * @author 80003614 
     * CreateDate: 2018-12-3
     */
    @Component("dataExtrComHandler")
    public class DataExtrComHandler {
    
    	......
    	
    	/**
    	 * 执行sql查询,加载查询内容到内存
    	 * @param connection 数据库连接对象
    	 * @param querySql 要执行的sql语句
    	 * @return
    	 * @throws Exception
    	 */
    	public List<Object[]> executeDBQuery(final Connection connection, final String querySql) throws Exception {
    		// 该处需防止内存溢出,后期应优化。
    		// ArrayListHandler:将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
    		ExecutorService executor = Executors.newSingleThreadExecutor();
    		FutureTask<List<Object[]>> future = new FutureTask<List<Object[]>>(new Callable<List<Object[]>>() {
    			@Override
    			public List<Object[]> call() throws Exception {// 执行sql
    				QueryRunner queryRunner = new QueryRunner();
    				List<Object[]> data = queryRunner.query(connection, querySql, new ArrayListHandler());
    				// Thread.sleep(11000);
    		
    				return data;
    			}
    		});
    		String exeSqlTimeout = null;
    		try {
    			executor.execute(future);
    			// 获取数据库规定的query timeout值
    			//exeSqlTimeout = sysParaCfgMapper.selectParaValue("EXE-SQL-TIMEOUT-DURATION");
    			List<Object[]> result = future.get(1000*60, TimeUnit.MILLISECONDS);
    			return result;
    		} catch (TimeoutException e) { // sql执行超时
    			throw new TimeoutException(
    					"Sql执行超时!系统规定Sql执行时间不能超过" + (Long.parseLong(exeSqlTimeout) / 1000 / 60) + "分钟...");
    		} catch (Exception e) {
    			throw new RuntimeException("Sql执行异常:" + e.getMessage());
    		} finally {
    			future.cancel(true);
    			executor.shutdown();
    		}
    	}
    	
    	......
    
    }	
    
    

    来源:https://blog.csdn.net/ithouse/article/details/78257418

    展开全文
  • Java方法设置超时

    万次阅读 2017-10-17 10:14:56
    我们在开发过程中可能会遇到这样的场景:在执行一个耗时操作的时候,如果在规定的时间内处理完成了,则返回正确的结果,否则视为超时任务,这个时候我们将不再等待(不再执行)该耗时操作,直接告诉调用者:这个任务...
  • 任务超时处理是比较常见的需求,Java中对超时任务的处理有两种方式,在文中给大家详细介绍,本文重点给大家介绍Java实现任务超时处理方法,需要的朋友可以参考下
  • 主要介绍了Java设置session超时(失效)的三种方法,本文讲解了在web容器中设置、在工程的web.xml中设置、通过java代码设置3种方法,需要的朋友可以参考下
  • 主要介绍了Java HttpURLConnection超时和IO异常处理的相关资料,需要的朋友可以参考下
  • 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索"java get connection 超时"答案上, 但始终找不到答案, 偶然尝试了下"java 设置超时" 问题就迎刃而解了....
  • 大多数的B2C商城项目都会有限时活动,当用户下单后都会有支付超时时间,当订单超时后订单的状态就会自动变成已取消 ,这个功能的实现有很多种方法,本文的实现方法适合大多数比较小的商城使用。具体实现方式可以跟随...
  • 前段时间在搞一个批量处理程序,涉及到多线程操作。...那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。 可是在网上搜了大半天,找到的都是无用的代码,根本不能用。 查了...
  • Java实现超时机制

    千次阅读 2019-09-26 21:18:23
    Java实现超时机制 package util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.*; public class TimeoutUtil { private static final Logger LOGGER = LoggerFactory...
  • java设置某段代码运行的超时时间

    千次阅读 2018-09-29 15:14:56
    一、将设置超时的代码放入线程中,我这边使用了线程池工具类, 也可直接ExecutorService thread= Executors.newCachedThreadPool(),建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可...
  • java中Socket设置超时时间的两种方法

    千次阅读 2021-02-21 16:28:49
    调用Socket的connct 方法打开连接,并设置连接超时时间 Socket socket = new Socket() socket.connect(new InetSocketAddress(ip, port), 3000); //设置超时3000毫秒 以上代码是设置Socket的连接超时时间,当连接...
  • 主要介绍了Java设置session超时的几种方式总结的相关资料,需要的朋友可以参考下
  • cxf wsdl2java 生成客户端调用代码设置超时时间

    千次阅读 热门讨论 2020-03-01 10:36:34
    参考资料:... 问题描述:通过cxf的wsdl2java命令生成webservice客户端调用代码,如何设置连接超时、响应超时? 解决方案: TransferImplService ss = new TransferImplService(new URL(systemConfig....
  • java设置socket超时时间的那些坑

    万次阅读 2018-12-09 19:32:32
    通常情况下 这样设置socket超时时间 方式1 final Socket socket = new Socket("ip","port");//自动开始连接ip socket.setSoTimeout(Constants.userRequestOutTime);//设置超时时间 ...
  • 主要介绍了Java编程Webservice指定超时时间代码详解,简单介绍了webservice,然后分享了通过使用JDK对Webservice的支持进行Webservice调用实现指定超时时间完整示例,具有一定借鉴价值,需要的朋友可以参考下。
  • Aliyun OSS Java SDK超时时间设置

    千次阅读 2016-07-18 20:39:31
    Aliyun OSS Java SDK发送一个请求,有5个阶段: 阶段Ⅰ 从连接池中获取连接,如果使用的连接已经达到最大连接数,则等待直到有连接释放,或达到最大超时时间,抛出异常ConnectionPoolTimeoutException。如果设置了...
  • 最近有需求说设置es搜索查询不能超时配置文件的毫秒数,所以正好使用的ExecutorService类,下面就 ExecutorService使用做记录: ResultData resultData = null;  ExecutorService executor = Executors....
  • java方法设置超时时间

    千次阅读 2015-04-15 11:03:32
    但是后台服务很不给力,并发一大常常就挂了,长时间不给返回,导致我的程序也挂死在那里…… 那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。 可是在网上搜了大半天,找到的都是...
  • java多线程设置超时时间

    万次阅读 2017-02-21 19:32:04
    情景:多线程中个别线程执行时间会很长...TimeUnit unit) 方法进行设置,但是这个方法是阻塞的,在取不到结果之前是不会执行后边的程序的。 下面代码是按照这个方法进行的测试:public static void main(String[] a
  • Java方法主动设置执行超时

    千次阅读 2019-11-24 20:51:13
    我们在开发过程中可能会遇到这样的场景:在执行一个耗时操作的时候,如果在规定的时间内处理完成了,则返回正确的结果,否则视为超时任务,这个时候我们将不再等待(不再执行)该耗时操作,直接告诉调用者:这个任务...
  • java 超时登陆

    千次阅读 2018-09-15 19:07:15
    alert("您的登录已超时, 请点确定后重新登录!"); //window.location.href="/fudaMes/login.jsp"; //document.location.href="/fudaMes/login.jsp"; signOutMethod(); } document.documentElement....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 343,066
精华内容 137,226
关键字:

java设置超时

java 订阅