context.getAttribute(“name”);
2)获取WEB应用的初始化参数,在DemoServlet的doPost方法中测试获取初始化参数:
ServletContext context = this.getServletContext();
String url = context.getInitAttribute(“url”);
31、事件处理模型
Java提供的事件处理模型是一种人机交互模型,有三个基本要素。
1)事件源:事件发生的场所,指各个组件,如按钮。
2)事件:事件封装了组件上发生的事件,比如按钮单击、按钮松开等。
3)事件器:负责事件源上发生的特定类型的事件,当事件到来时,还必须负责处理响应的事件。
32、java特点
一处编写,到处运行。
Java并不完全是编译型语言,编译的字节码文件运行时是解释执行的,
Java和C++的类也不都是完全静态绑定的,java的父子类调用==C++的虚函数。
33、多线程(thread、runnable、collable、condition)
1、守护线程(daemon):通过调用void setDaemon(boolean on)方法将自己设置成一个守护线程。thread.setDaemon(true);当所有的用户线程执行结束后,即使守护线程的run()方法还有未执行语句,也会立刻结束线程。
2、从JDK1.5开始,Java提供了三种方式来创建线程:
继承Thread类创建多线程,重写run()方法作为线程执行体。(不能再继承其他类\每一条线程都是Thread子类的实例共享数据复杂)
实现Runnable接口来创建线程,重写run()方法作为线程执行体。Thread(Runnable in);
实现Callable接口创建线程,重写run()方法作为线程执行体。实现Callable可返回结果,可抛出异常,通过futureTask.get(),方法获取结果,如果没有结果返回,可能会阻塞主线程。jsp乱码问题
3、线程知识
t.start();方法启动一个线程,使其处于就绪状态,得到CPU就执行,而调用run()相当于普通的方法调用。start()方法将“新建”状态下的线程加入“就绪”队列中等待CPU,run()方法属于Thread(),没有内容,需要重写。调用start()会默认调用run()。
**************************
***********************
******此处 缺一个 线程状态转换图
****
(1)对象与线程之间完全解耦or弱解耦(用构造方法创建线程实现联系)
(2)线程同步用sychronized修饰方法
(3)协调同步用wait()等待其他线程完成工作(释放CPU资源)
(4)线程联合,A联合B,A立刻停止,让B先执行
(5)守护线程做一些不重要的工作,一旦所有线程停止工作,守护线程立刻停止
4、常用方法:start()、run()、sleep(ms)、isAlive()===>false true false
wait()、sleep()都需要try/catch包裹,或是抛出InterruptedException(检查异常)。
sychronized(同步锁)的目标与wait()方法的目标不一致,会抛出IllegalMonitorSateException,不过InterruptExcprion会先出现。wait()和notify()方法必须采用当前锁调用,必须采用synchronized中的对象。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66099-13.html
光棍们就会找谁的麻烦
周4和周5的强势
说明了什么
这样躲避战乱的的女青年便有了和中国光棍们相知相恋组成家庭的机会