session application 和 pageContext ,request
Connection
int ,short,char,byte
新生代和老生代
不可以
1、html注释:
2、java注释,仅在有关脚本中使用://
或者多行注释/**/
3、jsp注释:<%----%>
1、直接处理 request.getAttribute();
2、请求转发 request.getRequestDispatcher().forward()
3、重定向 response.sendRedirect (“xxx”)
currentThread()
返回对当前正在执行的线程对象的引用
public static void main(String[] args) {System.out.println(Thread.currentThread().getName());}
结果:
main
static void yield()
提示调度程序,当前线程愿意放弃当前对处理器的使用。调度程序可以忽略这个提示。
sleep
导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。 该线程不会失去任何监视器的所有权。
void start()
一个线程的开始,执行之后java虚拟机调用该线程的run方法
public static void main(String[] args) throws InterruptedException {Runnable a = new MyRunnable();Thread t = new Thread(a);t.start();Thread.sleep(1000);System.out.println(Thread.currentThread().getName());}
以上代码最后输出的内容会延迟1s出现,其中MyRunnable是一个Runnable的实现类
void run()
如果线程使用Runnable构造的,则它的调用run方法,否则不执行任何操作并返回
public static void main(String[] args) throws InterruptedException {Runnable a = new MyRunnable();Thread t = new Thread(a);t.run();// t.start();Thread.sleep(1000);System.out.println(Thread.currentThread().getName());}
没有t.start();这一句,程序依然会执行
void interrupt()
中断调用方法的进程
public static void main(String[] args) {//线程中断//一个线程是一个独立的执行路径,他是否结束,应该由其自身决定//给线程打标记 来实现中断Thread t1 = new Thread(new MyRunnable2());t1.start();for (int i = 0;i<5;i++) {System.out.println(Thread.currentThread().getName() + ":" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}//给线程t1添加中断标记,告诉他人t1没了进而进入catch块 之后程序员决定是否死亡t1.interrupt();}static class MyRunnable2 implements Runnable{@Overridepublic void run() {for (int i = 0;i<10;i++){System.out.println(Thread.currentThread().getName() + ":" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println("线程死亡");return;}}}}
void setPriority(int newPriority)
其作用是:更改该线程的优先级
源码如下 先检查是否能改这个线程 之后设置优先级
public final void setPriority(int newPriority) {ThreadGroup g;checkAccess();if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {throw new IllegalArgumentException();}if((g = getThreadGroup()) != null) {if (newPriority > g.getMaxPriority()) {newPriority = g.getMaxPriority();}setPriority0(priority = newPriority);}}
int getPriority()
获取这个线程的优先级
void setName(String name)
命名调用该方法的线程
String getName()
返回此线程的名称
boolean isDaemon()
判断线程是否是守护线程
void setDaemon(boolean on)
将线程设置为守护线程
void join()
join()
join(x)
join(x,y)
三种形式 第二种是等待x毫秒后醒来或者被唤醒后醒来 ,第三种是x毫秒y纳秒之后 如果x为0相当于一直沉睡,第一种方式就等于join(0)
join的底层源码可以发现是通过使用Object类中的wait()方法来实现的
Object是所有类的父类,任何类都默认继承Object。Object类实现了哪些方法?
(1)clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
(2)getClass方法
final方法,获得运行时类型。
(3)toString方法
该方法用得比较多,一般子类都有覆盖。
(4)finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
(5)equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
(6)hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
(7)wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
(8)notify方法
该方法唤醒在该对象上等待的某个线程。
(9)notifyAll方法
该方法唤醒在该对象上等待的所有线程。
上海RR信息技术服务有限公司(信息敏感,只用公司名字的缩写)