ThreadLocal生成多线程WebClient

简介: package test;//www.cnblogs.com/chenying99/articles/3213544.htmlimport com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;impo
package test;


//www.cnblogs.com/chenying99/articles/3213544.html
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
//多线程webclient,本方案简单、小巧,容易理解
//ThreadLocalClientFactory.getInstance().getWebClient()调用
    public  class ThreadLocalClientFactory{
        
            //单例工厂模式
        private final static ThreadLocalClientFactory instance =new ThreadLocalClientFactory();
        
        public static ThreadLocalClientFactory getInstance(){
            return instance;
            }
        
        
        // 覆写ThreadLocal的initialValue方法
        //线程的本地实例存储器,用于存储WebClient实例
      private ThreadLocal<WebClient> client = new ThreadLocal<WebClient>() {  
    
          @Override    
      //该方法ThreadLocal变量第一次get的时候执行,如果该线程已经执行过set方法,initialValue不会执行
      protected synchronized WebClient initialValue(){  
          WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);  
            
           //设置webClient的相关参数  
          webClient.getCookieManager().setCookiesEnabled(true);// 开启cookie管理
            webClient.getOptions().setJavaScriptEnabled(true);// 开启js解析
            webClient.getOptions().setCssEnabled(false);
            // 当出现Http error时,程序不抛异常继续执行
            webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
            // 防止js语法错误抛出异常
            webClient.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
            webClient.getOptions().setTimeout(10000);
            // 默认是false, 设置为true的话不让你的浏览行为被记录
            webClient.getOptions().setDoNotTrackEnabled(false);
            // 设置Ajax异步处理控制器即启用Ajax支持
            webClient
                    .setAjaxController(new NicelyResynchronizingAjaxController());
        
          return webClient;  
      }  
  };  
    
  
  public void setWebClient(WebClient wc) {  
      client.set(wc);  
  }  
    
  public WebClient getWebClient() {  
      return client.get();  
  } 
  

    }


本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1792566

目录
相关文章
|
2月前
|
存储 Java 测试技术
ThreadLocal:线程专属的变量
ThreadLocal:线程专属的变量
42 0
|
4月前
|
存储 Java 数据安全/隐私保护
【JUC】ThreadLocal 如何实现数据的线程隔离?
【1月更文挑战第15天】【JUC】ThreadLocal 如何实现数据的线程隔离?ThreadLocal 导致内存泄漏问题?
|
4月前
|
存储 Java 数据安全/隐私保护
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
|
7月前
|
存储 Java
java之线程死锁和ThreadLocal的使用
java之线程死锁和ThreadLocal的使用
|
2月前
|
安全 Java
java中线程经常被问到ThreadLocal你懂吗?
java中线程经常被问到ThreadLocal你懂吗?
11 0
|
2月前
|
Java 关系型数据库 MySQL
【数据库连接,线程,ThreadLocal三者之间的关系】
【数据库连接,线程,ThreadLocal三者之间的关系】
24 0
|
2月前
|
存储 安全 Java
调用链跨线程传递 ThreadLocal 对象对比
说起本地线程专属变量,大家首先会想到的是 JDK 默认提供的 ThreadLocal,用来存储在整个链路中都需要访问的数据,并且是线程安全的。由于在落地全链路压测的过程中,一个基本并核心的功能需求是流量标记需要在整个链路中进行传递,那么线程上下文环境成为解决这个问题最合适的技术。
45 2
调用链跨线程传递 ThreadLocal 对象对比
|
2月前
|
存储 安全 Java
多线程------ThreadLocal详解
多线程------ThreadLocal详解
|
3月前
|
存储 安全 Python
什么是Python中的线程局部存储(Thread Local Storage)?
【2月更文挑战第3天】【2月更文挑战第6篇】
|
8月前
|
存储 安全 Java
【Java】线程数据共享和安全 -ThreadLocal
今天我要为大家推荐一个Java中非常实用且神奇的工具——ThreadLocal。它可以让我们在多线程环境下,轻松地实现线程私有的数据存储。它可以帮助我们在多线程环境下轻松解决变量共享和线程安全的问题。