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
  • 1962

WebClient 多线程并发限制 下载限制

.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows  7 下默认是2,在服务器操作...
  • woodenmen
  • woodenmen
  • 2014年08月22日 13:24
  • 1715

为避免多线程Connection混乱使用ThreadLocal来封装事务

上一篇博客总结了动态代理的使用及代码的含义。接下来,继续探究动态代理的实地应用——利用动态代理来封装事务。 首先,要先来回忆一下最原始的封装好的事务的代码,这里在连接数据库时用到了TheadL...
  • wangyy130
  • wangyy130
  • 2015年10月07日 20:43
  • 921

【java项目实战】ThreadLocal封装Connection,实现同一线程共享资源

线程安全一直是程序猿们关注的焦点,多线程也一直是比较让人头疼的话题,想必大家曾经也遇到过各种各种的问题,我就不再累述了。当然,解决方式也有很多,这篇博文给大家提供一种很好的解决线程安全问题的思路。 。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年08月08日 08:02
  • 9167

为什么WebClient在多线程中的操作会影响到UI线程(标题党)

最明显的问题就是UI线程会卡但不会卡死,但绝对没有操作UI线程 用DownloadString几乎不卡,用UploadData很容易卡 如果UploadData操作所使用的时间短的话那也不是多卡 但问...
  • z1101385391
  • z1101385391
  • 2013年12月20日 13:46
  • 1439

java多线程--深入理解threadlocal以及适用场景

如何使用:       简介: JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编...
  • sean417
  • sean417
  • 2017年04月10日 15:51
  • 779

Java--servlet + ThreadLocal解决多线程并发问题及实例

思维导图 – Servlet+ThreadLocal分包管理实例一:本文思维导图 二:ThreadLocal原理图 三:代码:实体层entity Book.javapackage entity;...
  • u014421677
  • u014421677
  • 2016年06月25日 11:15
  • 457

使用ThreadLocal管理Mybatis中SqlSession对象

最近在使用Mybatis中,发现需要像.NET EF那样管理宝贵的资源对象,即保证SqlSession在线程(准确的说是一次请求)中的唯一性。当然在hibernate中也是如此。         简...
  • qq_29227939
  • qq_29227939
  • 2016年07月25日 23:05
  • 3425

跟我学Java多线程——ThreadLocal

本篇文章讲解了ThreadLocal是什么,通过一个简单的demo来说明了ThreadLocal在同一线程中实现了线程内的数据共享,不同线程间我们实现了数据的隔离性,接下来通过一步步的去读Thread...
  • zwk626542417
  • zwk626542417
  • 2015年07月27日 08:18
  • 2840

ThreadLocal如何实现多线程资源共享

一、概念       ThreadLocal是什么呢?
  • ggibenben1314
  • ggibenben1314
  • 2014年08月28日 16:10
  • 1867
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ThreadLocal生成多线程WebClient
举报原因:
原因补充:

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