spring线程监听
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring线程监听内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring线程监听相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring线程监听相关知识
-
Spring Boot(六)自定义事件及监听事件及监听并不是SpringBoot的新功能,Spring框架早已提供了完善的事件监听机制,在Spring框架中实现事件监听的流程如下:自定义事件,继承org.springframework.context.ApplicationEvent抽象类定义事件监听器,实现org.springframework.context.ApplicationListener接口在Spring容器中发布事件实现自定义事件及监听定义事件 1 //自定义事件 2 public class ApplicationEventTest extends ApplicationEvent { 3 4 public ApplicationEventTest(Object source) { 5 &nbs
-
Spring之事件监听(观察者模型)本文介绍下Spring中的事件监听,其本质也就是观察者模型(发布/订阅模式),具体的观察者模式参考下文*********************Java观察者模式(Observer)********************@Spring事件监听一、事件监听案例1.事件类/** * 事件类 * @author 波波烤鸭 * @email dengpbs@163.com * */public class MyEvent extends ApplicationContextEvent { private static final long serialVersionUID = 1L; &nbs
-
监听器第一篇【基本概念、Servlet各个监听器】什么是监听器 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。 为什么我们要使用监听器? 监听器可以用来检测网站的在线人数,统计网站的访问量等等! 监听器组件 监听器涉及三个组件:事件源,事件对象,事件监听器 当事件源发生某个动作的时候,它会调用事件监听器的方法,并在调用事件监听器方法的时候把事件对象传递进去。 我们在监听器中就可以通过事件对象获取得
-
Spring-boot事件监听和源码分析springboot的事件监听:为bean之间的消息通信提供支持。当一个bean做完一件事以后,通知另一个bean知晓并做出相应处理。这时,我们需要另一个bean,监听当前bean所发生的事件。实现步骤:四个步骤,五种方式第一种方式 1、自定义事件,一般是继承ApplicationEvent抽象类 2、定义事件监听器,一般是实现ApplicationListener接口 3、 1)把监听器加入到SpringApplication中:ApplicationListener.addListener();然后发布事件 2)或放置到spring容器:@Conponent 3)或在application.properties配置文件中配置context.listener.classes=监听器全类名&n
spring线程监听相关课程
spring线程监听相关教程
- 3.3 监听事件 Selector 提供了 select 方法用于监听 I/O 事件,声明如下:public abstract int select() throws IOExceptionpublic abstract int select(long timeout) throws IOException当没有 I/O 事件产生时,调用 select 方法的线程会被阻塞。如果你调用无参 select 方法,线程进入等待状态,直到有 I/O 事件发生才返回。如果你调用包含了 timeout 参数的 select 方法,线程会在 timeout 超时,或者是有 I/O 事件发生返回。select 的返回值表示产生了 I/O 事件的 SelectionKey 的个数。
- 3. 线程池模型 线程池模型的结构如下:从图中可以看出,线程池模型的程序结构如下:创建一个监听线程,通常会采用 Java 主线程作为监听线程。创建一个 java.net.ServerSocket 实例,调用它的 accept 方法等待客户端的连接。服务器预先创建一组线程,叫做线程池。线程池中的线程,在服务运行过程中,一直运行,不会退出。当有新的客户端和服务器建立连接,accept 方法会返回 java.net.Socket 对象,表示新的连接。服务器一般会创建一个处理 java.net.Socket 逻辑的任务,并且将此任务投递给线程池去处理。然后,监听线程返回,继续调用 accept 方法,等待新的客户端连接。线程池调度空闲的线程去处理任务。在新新任务中调用 java.net.Socket 的 recv 和 send 方法和客户端进行数据收发。当数据收发完成后,调用 java.net.Socket 的 close 方法关闭连接,任务完成。线程重新回归线程池,等待调度。下来,我们同样通过示例代码演示一下线程池模型的编写方法。程序功能和每线程模型完全一致,所以我们只编写服务端程序,客户端程序采用每线程模型的客户端。示例代码如下:import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class TCPServerThreadPool{ // 服务监听端口号 private static final int PORT =56002; // 开启线程数 private static final int THREAD_NUMS = 20; private static ExecutorService pool = null; // 创建一个 socket Task 类,处理数据收发 private static class SockTask implements Callable<Void> { private Socket sock = null; public SockTask(Socket sock){ this.sock = sock; } @Override public Void call() throws Exception { try { while (true){ // 读取客户端数据 DataInputStream in = new DataInputStream( new BufferedInputStream(sock.getInputStream())); int msgLen = in.readInt(); byte[] inMessage = new byte[msgLen]; in.read(inMessage); System.out.println("Recv from client:" + new String(inMessage) + "length:" + msgLen); // 向客户端发送数据 String rsp = "Hello Client!\n"; DataOutputStream out = new DataOutputStream( new BufferedOutputStream(sock.getOutputStream())); out.writeInt(rsp.getBytes().length); out.write(rsp.getBytes()); out.flush(); System.out.println("Send to client:" + rsp + " length:" + rsp.getBytes().length); } } catch (IOException e) { e.printStackTrace(); } finally { if (sock != null){ try { sock.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } } public static void main(String[] args) { ServerSocket ss = null; try { pool = Executors.newFixedThreadPool(THREAD_NUMS); // 创建一个服务器 Socket ss = new ServerSocket(PORT); while (true){ // 监听新的连接请求 Socket conn = ss.accept(); System.out.println("Accept a new connection:" + conn.getRemoteSocketAddress().toString()); pool.submit(new SockTask(conn)); } } catch (IOException e) { e.printStackTrace(); } finally { if (ss != null){ try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
- 6.2 线程唤醒 思考:当前线程休眠了,那么什么时候进行唤醒呢?源码分析如下所示:@Overridepublic Promise<V> setSuccess(V result) { //1.setSuccess0 赋值操作 if (setSuccess0(result)) { //2.通知执行监听器 notifyListeners(); return this; } throw new IllegalStateException("complete already: " + this);}private boolean setSuccess0(V result) { //继续进入方法 return setValue0(result == null ? SUCCESS : result);}private boolean setValue0(Object objResult) { if (RESULT_UPDATER.compareAndSet(this, null, objResult) || RESULT_UPDATER.compareAndSet(this, UNCANCELLABLE, objResult)) { //继续进入方法 checkNotifyWaiters(); return true; } return false;}private synchronized void checkNotifyWaiters() { if (waiters > 0) { //核心:唤醒之前休眠的线程 notifyAll(); }}源码分析总结:堵塞的核心是通过 Object.wait () 方法进行休眠当前线程,普通的 Java 多线程知识;执行完成之后给不同状态(setSuccess、setFailure)赋值的时候唤醒休眠的线程;唤醒线程之后调用监听器的方法 l.operationComplete(future);
- 2. 事件监听 在系统发生了一个事件之后,我们如何接收到这个事件呢?这就需要在事件发生之前提前向系统注册一个事件监听器,告诉 Android 系统我关心那些事件,那么系统就会在事件发生的相应时间点给你一个回调通知,常见的事件监听器有以下几个:OnClickListener:用来监听控件的点击事件,即在用户点击某个 View 的时候回调此接口。(这也是开发过程中最最最常见的接口,一定要牢牢掌握!)OnLongClickListener:顾名思义,在 View 被长按的时候回调OnFocusChangeListener:当控件的焦点发生变化的时候回调OnKeyListener:当用户点击手机上的按键的时候回调此接口,通常可以用来拦截按键事件,然后针对特殊场景做特殊处理OnTouchListener:当用户触摸屏幕的时候回调,此接口会发生在OnClickListener回调的前面,所以我们可以在Touch事件进行一些更早期的预处理事务。OnMenuItemClickListener:当用户点击菜单的时候调用以上就是 Android 系统提供的常用事件处理监听器,其中最为常见的就是OnClickListener,未来的开发中会大量的使用到,所以必须掌握。所以接下来会以OnClickListener为例子来演示如何完成事件处理,其他的监听器使用方式也都大同小异。
- 5.3 主线程接受消息 跟上述场景类似,主线程也需要通过监听的方式获取辅线程的消息:1062
- 3.2 多线程配置 在 ServerBootstrap 调用方法 group 的时候,传递的参数是两个不同的线程组,负责监听的 acceptor 线程组的线程数为 1,负责处理客户端线程组的线程数大于 1。实例:public class ServerNetty{ private ServerBootstrap bootstrap=null; private EventLoopGroup acceptorGroup=null; private EventLoopGroup clientGroup=null; public void init(){ acceptorGroup=new NioEventLoopGroup(1);//线程数量为 1 clientGroup=new NioEventLoopGroup();//默认是 cpu 的核心数 bootstrap.group(acceptorGroup,clientGroup); }}
spring线程监听相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议