handler

线程池的学习和使用

亡梦爱人 提交于 2020-03-06 19:25:53
目录 什么是线程池 创建线程池 使用线程池 声明 ThreadFactory 创建线程池类 调用线程池 什么是线程池 线程池的作用是初始化一些线程,当有任务的时候,就从中启动一个来执行相关任务,执行完后,线程资源重新回收到线程池中,达到复用的效果,从而减少资源的开销 创建线程池 在JDK中, Executors 类已经帮我们封装了创建线程池的方法。 Executors.newFixedThreadPool(); Executors.newCachedThreadPool(); Executors.newScheduledThreadPool(); 但是点进去看的话, public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } 它的内部实现还是基于 ThreadPoolExecutor 来实现的。通过阿里代码规范插件扫描会提示我们用 ThreadPoolExecutor 去实现线程池。通过查看 ThreadPoolExecutor 的构造方法 public

SpringMVC执行原理

冷暖自知 提交于 2020-03-06 10:20:20
SpringMVC执行原理 1. 前端控制器:DispatcherServlet 位于 /WEB-INF/web.xml <!--1.注册DispatcherServlet--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--关联一个springmvc的配置文件:【servlet-name】.xml--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!--启动级别-1:和服务器同时启动--> <load-on-startup>1</load-on-startup> </servlet> <!-- 在SpringMVC中: --> <!-- / 匹配所有的请求,但不匹配.jps文件--> <!-- /* 匹配所有的请求,并且匹配.jsp文件--> <servlet-mapping> <servlet-name>springmvc</servlet

高性能Server---Reactor模型

£可爱£侵袭症+ 提交于 2020-03-05 05:30:14
高性能Server---Reactor模型 原文地址: http://www.ivaneye.com/2016/07/23/iomodel.html 无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮件用的Outlook,Foxmail等 你看视频用的优酷,土豆等 你写文档用的Office365,googleDoc,Evernote等 你浏览网页用的IE,Chrome等(B/S是特殊的C/S) ...... C/S架构的软件带来的一个明显的好处就是:只要有网络,你可以在任何地方干同一件事。 例如:你在家里使用Office365编写了文档。到了公司,只要打开编辑地址就可以看到在家里编写的文档,进行展示或者继续编辑。甚至在手机上进行阅读与编辑。不再需要U盘拷来拷去了。 C/S架构可以抽象为如下模型: C就是Client(客户端),上面的B是Browser(浏览器) S就是Server(服务器): 服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务 C/S架构之所以能够流行的一个主要原因就是网速的提高以及费用的降低,特别是无线网络速度的提高。试想在2G时代,大家最多就是看看文字网页,小说什么的。看图片,那简直就是奢侈!更别说看视频了! 网速的提高,使得越来越多的人使用网络,例如:优酷,微信都是上亿用户量

Android:异步处理之Handler+Thread的应用(一)

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-04 07:48:42
前言   如果你在阅读本文之前,你不知道Handler在Android中为何物,我建议你先看看本系列的第一篇博文《 Android:异步处理之Handler+Thread的应用(一) 》;我们都知道在Android系统中不能在子线程中直接更新UI界面,所以我们一般借助Handler+Thread或者AsyncTask这两种方法来实现UI界面的更新。而Handler+Thread这方法其实就是子线程向UI主线程进行消息传递,通知UI主线程去更新界面的一套机制。因为有时候面试官比较喜欢和蔼可亲的考你Handler的这套机制,所以我们结合源代码深入的研究这套通讯机制是灰常有必要的,你想想如果能鄙视一下面试官,呵呵o(╯□╰)o。。 概述   谷歌的这套消息机制是参考windows设计的,姑爷微爷之间有啥专利官司咱也不关心。一般来说,线程都会通过Looper来建立自己的消息循环,并且锁定一个FIFO的消息队列MessageQueue,Handler通过Looper来实现Message(消息)在MessageQueue中的存取。每一个Hanlder在实例化的时候都会自动或者手动绑定一个Looper,间接向一个MessageQueue发送Message,所以Handler也封装了消息发送和接收的接口。 入门例子   看概述好闷的,琢磨文字不说,晦涩又难懂,记得住又成一个大问题

Android handler机制流程详解

六眼飞鱼酱① 提交于 2020-03-04 06:39:53
Android handler机制流程详解 handler机制由以下几部分组成: .Handler .Message .MessageQueue .Looper 总体流程介绍: 一、进程启动时 在main方法中为主线程创建了对应自己线程的Looper,在Looper被创建的同时会创建一个MessageQueue消息队列并持有。同时在main方法中调用了Looper.loop()进行一个死循环遍历Looper自己持有的消息队列。 二、创建handler 如果在主线程中创建,handler能获取到主线程对应的looper并持有。如果是在子线程中创建handler,则需要自己调用创建looper方法和自己调用Looper.loop。否则会报错。 三、创建Message并发送 创建的Message将创建自己的handler信息封装进Message内部,最终被发送到了MessageQueue消息队列中。 四、接收消息 在Looper.loop中,从MessageQueue中拿出Message,并根据其中对应的handler信息进行分发处理 对应关系: 一条线程Thread对应唯一的一个Looper,其对应相关的信息存储在ThreadLocal中。 一个Looper对象持有一个自己的MessageQueue。 在同一条线程中,无论创建多少handler

[GYCTF2020]Blacklist

天大地大妈咪最大 提交于 2020-03-03 19:21:51
[GYCTF2020]Blacklist 判斷體型 這題和之前的隨便注長得一模一樣,不出意外就是SQL注入了。 標題有個hint,blacklist,之後肯定得繞過黑名單。 猜解SQL語句 1 => 正常回顯 1' => 正常回顯 1' or 1# => 正常回顯 1' and 0# => 不回顯 猜測查詢語句爲 select * from Table where inject = '$inject'; 猜解字段數 1' order by 1# => 正常回顯 1' order by 2# => 正常回顯 1' order by 3# => 報錯 所以知道字段數爲2 聯合查詢 1' union select 1,2# => 報錯 return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject); 這就是題目hint說的blacklist,有select不能直接聯合查詢,有set和prepare就不能預編譯了,有alter和rename,連堆注入都不行嗎? 看下大佬WP 堆注入 這題還是堆注入,不過不是像隨便注一樣重命名,而是通過 handler 讀取表。 先看下有哪些表。 1';show tables# 有一個 FlagHere 的表,應該就是它了。

设计模式之责任链模式

做~自己de王妃 提交于 2020-03-03 10:30:50
在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:    责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 从击鼓传花谈起   击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。   比如说,贾母、贾赦、贾政、贾宝玉和贾环是五个参加击鼓传花游戏的传花者,他们组成一个环链。击鼓者将花传给贾母,开始传花游戏。花由贾母传给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又贾宝玉传给贾环,由贾环传回给贾母,如此往复,如下图所示。当鼓声停止时,手中有花的人就得执行酒令。   击鼓传花便是责任链模式的应用。责任链可能是一条直线、一个环链或者一个树结构的一部分。 责任链模式的结构   下面使用了一个责任链模式的最简单的实现。   责任链模式涉及到的角色如下所示:   ●   抽象处理者(Handler)角色: 定义出一个处理请求的接口。如果需要,接口可以定义

[Android] android的消息队列机制

ε祈祈猫儿з 提交于 2020-03-02 12:30:19
android下的线程,Looper线程,MessageQueue,Handler,Message等之间的关系,以及Message的send/post及Message dispatch的过程。 Looper线程 我 们知道,线程是进程中某个单一顺序的控制流,它是内核做CPU调度的单位。那何为Looper线程呢?所谓Looper线程,即是借助于Looper和 MessageQueue来管理控制流的一类线程。在android系统中,application的主线程即是借助于Looper和 MessageQueue来管理控制流的。其实,不仅仅只有主线程可以用Looper和MessageQueue来管理控制流,其他的线程也一样可以。我 们可以先看一下android source code的注释中给出的一种Looper线程的实现方式: package com.example.messagequeuedemo; import android.os.Handler; import android.os.Looper; import android.util.Log; public class LooperThread extends Thread { public static final String TAG = MainActivity.TAG; private static final

Android Looper和Handler分析

只愿长相守 提交于 2020-03-02 12:29:19
Android应用程序是通过消息来驱动的,每个应用程序都有一个Main looper在ActivityThread中创建。我们这一节中就主要来分析下Looper和Handler的实现机制,首先来简单介绍一下它们的关系: ▪Thread、Looper、MessageQueue、Handler的关系 –Thread线程是整个Looper循环执行的场所 –Looper消息泵,不断的从MessageQueue中读取消息并执行,Looper就是一个无限循环,Looper中包含MessageQueue –MessageQueue消息队列,负责存放消息 –Looper分发消息给Handler执行;Handler同时可以向MessageQueue添加消息 我们通过下面一个简单的程序来看一下如何使用Looper和Handler: [java] view plain copy class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper

异常的保护机制

我是研究僧i 提交于 2020-03-02 12:13:26
以栈作为基础的SEH本身具有很大的危险性,我们可以利用各种手段对栈上SEH节点进行覆盖重写,再次执行异常处理操作时就会将执行权给到了我们用来覆盖的函数上,这实际上在以前是很常见的windows栈溢出手段,当然,除了这种方法外还有许许多多的利用手段,可见这样的异常处理机制还是不够完善的。为了解决这些问题,微软逐步加入了Safe SEH、SEHOP、VCH等来弥补。 Safe SEH SafeSEH又叫做软件DEP,是一种在软件层面实现的对SEH的保护机制,它需要操作系统和编译器的双重支持,在vs2013及以后的版本中会自动启用 /SafeSEH 链接选项来使用SafeSEH。也正是因为该项技术使得以往简单的覆盖异常处理句柄的漏洞利用几乎失效了 在加载PE文件时,SafeSEH将定位合法的SEH表的地址(如果该映像不支持SafeSEH的话则地址为0),然后是用共享内存中的一个随机数进行加密处理,程序中所有的异常处理函数的地址提取出来汇总放入SEH表,并将该表放入程序映像中,还会将将加密后的SEH函数表地址,IMAGE的开始地址,IMAGE的长度,合法SEH函数的个数,作为一条记录放入ntdll(ntdll模块是进行异常分发的模块)的加载模块数据内存中,每次调用异常处理函数时都会进行校验,只有二者一致才能够正常进行,该处理由RtlDispatchException() 开始