线程最多的用处就是可以处理多个用户的请求,
或者在一个比较耗时的请求内,把比较耗时的操作丢给一个线程,这样就可以直接退出这个请求了,让后其他事情让线程去做
比如一个请求过来,处理完后需要给用户发邮件,由于发邮箱的操作非常耗时,可以把发邮箱这个操作丢到线程里面去操作,这样立即返回结果给前端,其它的后台底下再去处理
一旦运行start()后,该线程就给启动了,方法就退出了
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口
使用thread类创建线程
class Demo extends Thread{
public void run(){
for(int i=0;i<60;i++){
System.out.println(Thread.currentThread().getName()+i);
}
}
}
继承runnable接口创建线程
class Demo2 implements Runnable{
public void run(){
for(int x=0;x<60;x++){
System.out.println(Thread.currentThread().getName()+x);
}
}
}
以上只要继承该类,调用start( );方法就可以启动线程
线程在建立后并不马上执行run方法中的代码,而是处于等待状态。线程处于等待状态时,可以通过Thread类的方法来设置线程不各种属性,如线程的优先级(setPriority)、线程名(setName)和线程的类型(setDaemon)等。
当调用start方法后,线程开始执行run方法中的代码。线程进入运行状态
可以通过Thread类的isAlive方法来判断线程是否处于运行状态。当线程处于运行状态时,isAlive返回true,当isAlive返回false时,可能线程处于等待状态,也可能处于停止状态。
一但线程开始执行run方法,就会一直到这个run方法执行完成这个线程才退出。但在线程执行的过程中,可以通过两个方法使线程暂时停止执行。这两个方法是suspend和sleep。在使用suspend挂起线程后,可以通过resume方法唤醒线程。而使用sleep使线程休眠后,只能在设定的时间后使线程处于就绪状态(在线程休眠结束后,线程不一定会马上执行,只是进入了就绪状态,等待着系统进行调度)
有三种方法可以使终止线程。
1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。
3. 使用interrupt方法中断线程。
一些常见问题
1.当线程目标run()方法结束时该线程完成。
2.一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且只能一次。一个可运行的线程或死线程可以被重新启动。
在java中wait和sleep方法的不同?
最大的不同是在等待时wait会释放锁,而sleep一直持有锁。
Wait通常被用于线程间交互,sleep通常被用于暂停执行。