java复习第十二天


一、复习AWT事件模型(Observer模式)
   1、事件源
   2、事件对象
   3、事件监听器

事件源和监听器事先进行授权注册,当事件条件满足时,事件源会给注册的监听器发送一个事件对象,由事件监听器作出相应的处理。

一个事件源可以是多种事件的事件源
一个事件源就同一类事件可以注册多个监听器
一个监听器可以同时注册在多个事件源当中

事件源和监听器是独立,弱耦合的,是各司其职的

事件对象中会封装事件源对象
事件监听接口中的每一个方法都要以事件对象为参数
事件源中要保存和它有监听关系的监听器
事件源给事件监听器发送事件对象:事件源以事件对象作为参数,调用监听器接口的相应方法,通过回调,调用的是不同监听实现类的方法

二、
在Java的图形编程中,所有动作(事件)都已经提供了相应的事件对象和事件监听接口,
例如:实现窗口的关闭按钮,点击关闭按钮会发出相应的事件对象,相应的调用监听器中实现好的方法。
相应的方法清参阅Java2 SE API帮助文档。

缺省适配模式,通过一个抽象类实现接口,抽象类中的接口方法实现,都是一个无意义的空实现,可以继承这个抽象类,只覆盖向覆盖的方法就可以了。

在java.awt.event包中,会有一些适配类,也就是把相应的XXXListener,换成XXXAdapter就是适配类。
适配类是抽象类,其中对接口XXXListener中的方法进行了空实现,实现这个类,覆盖对自己有用的方法

在java.awt.event包中的ActionEvent类,在以下操作中会发送这个事件,
1,JButton组件,按钮被点击
2,JTextField组件,在单行文本域中按Enter键。
3,JCheckBox组件,选中了复选框。
4,JRadioButton组件,选中了单选按钮。
5,JMenu组件,选中菜单项。


添加事件监听:
1、实现监听接口
2、将监听器对象注册在组件(事件源)中

ActionEvent 
事件源 --- 组件 JButton 按钮   点击触发ActionEvent 
               JTextField 单行文本域  输入内容以后回车触发ActionEvent 
jtf.getText();  //得到文本域中的内容

练习:
1、写一个图形界面,采用BorderLayout布局,中间的部分放置一个可以滚动不可编辑的JTextArea,南面放置一个可以编辑的JTextField,
但在TextField中输入文字并按下回车的时候,文字会添加到TextArea中

2、为BAM添加用户界面
需要以下几个类:

BAMClient 其中会包含一个Frame,这是用户主界面
MainPanel:主界面,用户可以选择开户或者登录
RegisterPanel:用户开户具体用到的界面
LoginPanel:用户登录需要的界面
BusinessPanel:界面上会显示账户的功能 至少包括存款和取款,对于可透支的用户,还允许用户修改透支额度,对于贷款用户,还允许用户贷款和还贷款

注:本练习的界面布局不做要求,请阅读现有代码,添加事件处理代码
提示:在开户或者登录之后都会跳到BusinessPanel,而用户点击了交易之后,界面停留在BusinessPanel
要随时注意在BusinessPanel上根据数据的变化更新显示信息

三、多线程
C++的多进程是OS系统并发的一个任务
Java中没有多进程,一个JVM就是一个进程

线程是在进程中并发的一个顺序的执行流程

多进程:划分时间片,宏观上并行,微观上串行
多线程:cpu在进程内部再划分时间片

CPU ,代码 ,数据
进程:进程间数据独立
线程:数据空间共享,堆空间的共享(堆空间中存放的是对象),栈空间是独立的
所以线程间切换容易,称为轻量级进程

一个线程对象代表了一个线程,并非就是一个线程
线程是操作系统中负责维护的资源
java.lang.Thread类的一个对象就代表一个线程
线程是底层OS维护的资源,JVM跑在OS上,在JVM中创建一个Thread对象,调用其start()方法,底层OS会申请一个线程资源,线程对象可到底层管理一个线程
创建好线程之后,把要让线程执行的代码封装到线程对象中(覆盖run()方法)

实现线程代码的方式:
1、继承Thread 类,覆盖run()方法
   去底层申请线程并运行,对线程对象调start()方法,main方法是一个主线程
   宏观并行,微观串行
2、实现Runnable接口
  使用多态获得Runnable对象,成为目标对象
  再利用目标对象构造线程对象  Thread t = new Thread(target);


四、多线程的状态转换图(7状态图)
  见另一文件,名为Thread.pdf


作业:
用两种方式实现两个线程,一个线程负责打印1-2600,另一个线程打印A-Z,反复打印100遍



你可能感兴趣的:(java,jvm,多线程,thread,OS)