「java线程事件」java的事件处理
今天给各位分享java线程事件的知识,其中也会对java的事件处理进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java中,线程是什么意思,多线程又是什么
在计算机中当一个程序运行的时候就会创建至少一个进程,例如当我们运行QQ的时候,系统就会创建进程来处理我们平时的一些操作,当我们打开任务管理器的时候,在进程的列表里面就可以找到QQ.exe的运行程序;
在计算机中处理进程之外还有另一个概念就是线程,线程是存在于进程当中,一个进程可以包含多个线程;当我们的计算机有多核处理器的时候,使用多线程可以加快程序的运算速率;如果一个进程中只有一个线程,当程序遇到一个比较耗时的计算的时候,由于程序是单线程的,那么程序只能等待这个运算结束的时候再继续运行,这样会大大的降低程序的效率;当时用多个线程的时候,在某个线程遇到比较耗时的运算的时候,该线程可以继续自己的运算,但是其他的线程也可以同步进行,这样当耗时的计算结束之后,其他线程也将自己所需要的东西执行完毕,这样就会很大的提高程序执行效率;
在程序运行中对于文件的保存相对于处理器的运算速度来说是很慢的,当我们程序中接收到一个保存文件的信息之后,我们可以创建一个保存文件的线程,在主线程中我们可以继续进行我们的其他运算,这样当文件保存好之后,我们的其他运算也会完成,互不影响;
在Java中我们可以创建一个自己的类继承于Thread类,并且重写run() 方法,当线程启动之后,run()方法里面的操作都在线程中进行处理,而不会影响主线程的信息;
当我们创建好一个自定义线程类之后,我们可以创建这个自定义线程的对象,进行线程的启动;线程须调用start();方法进行启动,这样run()方法里面的内容才会在线程中运行;如果我们不去调用start()方法,那我们只是创建了一个普通的类,即使我们手动调用run()方法,run()方法里面的内容也不会在线程中运行;
在Java中线程主要有初始状态,运行状态,阻塞状态,终止状态等;当我们新创建一个线程对象的时候,此时线程的状态为初始状态;当我们调用start()之后,此时的线程才被激活成为运行状态,之后run()方法里面的信息才会在子线程中运行;我们可以在不同的阶段调用不同的方法将线程设置为不同的状态;比如有时候我们的操作需要等待其他线程中运算结束之后才可以继续进行,这时候我们就可以将线程设置为等待状态,当需要的资源满足条件之后,可以继续运行当前的线程;
以上的内容就是关于Java中线程是什么,更多关于Java方面的问题可以看下这个视频教程:网页链接,希望我的回答能帮到你。
java自定义事件,线程a如何每一秒钟触发一个事件,然后另一个线程b监听之,并作出反应?
线程a是作为事件源,那么线程a这个类就必须提供一个可以增加监听器的方法,就像GUI编程中的addActionListener这个样的方法。线程a这个类里面是有一个专门存放监听器的一个容器,例如是list。然后你 增加监听器的方法就是把监听器放进这个容器里面。你用一个监听器去监听一个事件的发生,就可以在线程a这个类中,写一个产生事件的一段代码,然后每当产生一个事件之后,去遍历list,去调用监听器的对于这个事件的处理方法,这样子就可以了。这应该就是java中的事件模式。
java中的两种事件分发线程有什么区别?
默认情况下,所有的AWT或者基于Swing的应用程序,都是开始于两个线程的。其中一个就是主线程,它处理main方法里面的代码。另外一个线程,被称作“事件分发线程”(Event-dispatching thread),它负责处理事件、绘图、和布局。在AWT或者基于Swing的程序中,所有的事件都是由监听器来处理的,而监听器正是在这个“事件分发线程”(Event-dispatching thread)里面收到事件的。举例来说,你在actionPerformed()方法里面写的代码是自动在“事件分发线程”(Event-dispatching thread)里面被执行的(你不必为此作什么事情)。而且,这对所有其他的事件处理方法都是成立的。正是由于这个原因,“事件分发线程”(Event-dispatching thread)在Swing和AWT里面具有极其重要的作用,这个线程在维护组件状态和显示方面扮演着一个基础性的角色。
和这个“事件分发线程”(Event-dispatching thread)相关的就是一个被叫做“系统事件队列”system event queque一个FIFO队列。这个队列象别的队列一样,用先进先出的方式被填充。每个请求(就是事件)都用这个队列的顺序来执行事件处理代码,而不管这个请求是否会更新组件的properties, layout, or painting。所有的事件都是一个个的被串行处理的,之所以这么作就是为了避免这中情况----组件在被重绘的过程中,其状态被修改。所以说嘛,知道了这点,如果你想要在“事件分发线程”(Event-dispatching thread)外再dispatch events时就要小心了。举例来说,在一个单独的线程(无论时在main线程里面,还是在你自己创建的线程)里面,调用fireXX()方法都是不安全的。
既然,“事件分发线程”(Event-dispatching thread)要执行所有的监听器里面的方法,painting, layou等,那么event-handling, painting,以及layout等方法必须要快速执行,就变的相当的重要了。否则的话,这个“系统事件队列”system event queue就会为了等待一个事件处理,比方说repaint、layout,的完成而被堵塞,这样你的应用程序看起来就僵住不动了。
注意:如果你对,你自己写的event-handling代码就是运行在这个“事件分发线程”(Event-dispatching thread)里面还有什么不服的话,下面的这个静态方法可以让你闭嘴。
SwingUtilities.isEventDispatchThread().这个方法会返回true或者false来表明是否你的方法时在“事件分发线程”(Event-dispatching thread)里面被调用的。
为了说明这一点,我们假设,你现在有个swing程序,这个程序有个button和一个存有数据的table。这个button被放上了ActionListener监听器,在这个ActionListener的actionPerformed()方法里面是数据库访问。在数据得到以后,数据被递交给table的model,然后table也相应的更新它的显示。那么这样的问题就是:如果当我们按下button时,连接数据库很慢,或者根本就连接不上数据库,或者从数据库里面得出了很多的数据以至于得花费一段时间来从数据库传来这些数据,这是问题就出现了,我们的GUI就会变的相当的迟钝,除非数据传送完毕了,或者异常发生了,GUI的相应才恢复快速。所以,如果想解决这个问题,保证actionPerformed()方法可以执行的快点,你就需要自己创建一个线程,用你自己的线程来作这件极其耗费事件的事。
java线程事件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java的事件处理、java线程事件的信息别忘了在本站进行查找喔。
发布于:2022-12-15,除非注明,否则均为
原创文章,转载请注明出处。