ThreadLocal生成多线程WebClient

原创 2016年08月28日 14:11:13
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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

解决htmlunit的webclient对象在多线程环境下的共享问题

HtmlUnit在多线程环境下怎么使用才能避免网页抓取失败的问题。下面浅谈该问题的解决办法。 导致这个问题的原因其实蛮简单,举个例子来说,A线程正在使用一个WebClient对象抓取网页,在整个抓取...
  • andybbc
  • andybbc
  • 2016年01月28日 13:51
  • 1649

java多线程——ThreadLocal

ThreadLocal介绍ThreadLocal可以创建只能由同一线程读取和写入的变量。因此,即使两个线程正在执行相同的代码,并且代码具有对 ThreadLocal变量的引用,那么这两个线程不能看到对...

ThreadLocal:多线程共享资源安全访问新思路

ThreadLocal是解决线程安全问题一个很好的思路,ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,由于Key值不可重复,...

多线程中的ThreadLocal 详解

要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的?ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类...

多线程中ThreadLocal的理解

1、理解ThreadLocal 在多线程开发的过程中可能会有这样的需求,有些变量或者对象在同一个线程中是共享的,在不同的线程中是隔离的,如何实现? (1)下面的这个例子是演示了在多线程的环境下不同...
  • eff666
  • eff666
  • 2016年09月04日 16:07
  • 418

多线程_10_ThreadLocal案例之JDBC

引用: http://my.oschina.net/huangyong/blog/159725 http://www.iteye.com/topic/103804 /* ThreadLoc...

【并发编程】线程范围内的数据共享,ThreadLocal,多线程间的数据共享

这几天生病了,所以学的比较少,只学习了关于线程中的线程范围数据共享,ThreadLocal以及多线程数据共享。 在这里记下我的理解和代码,其实理解都写在代码注释里了,个人觉得这样更加适合以后复习。 ...

ThreadLocal与多线程

/** * 读书笔记: * * 如果对象是非线程安全的,在多线程环境下,对对象的访问必须使用synchronized进行同步,但是这样就降低了并发性,影响系统的性能, * ThreadL...

【多线程】彻底理解ThreadLocal

彻底理解ThreadLocal 知其然 synchronized这类线程同步的机制可以解决多线程并发问题,在这种解决方案下,多个线程访问到的,都是同一份变量的内容。为了防止在多线程访问的过程中...

android多线程数据存储 - ThreadLocal的工作原理

定义ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,存储以后,只能在该线程中可以获取到存储的数据,对于其他线程来说无法获取。使用场景 某些数据以线程为作用域并且在不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ThreadLocal生成多线程WebClient
举报原因:
原因补充:

(最多只允许输入30个字)