线程各个状态转换图
多线程中常用API总结
/*Thread类的静态sleep方法将暂停当前线程给定的毫秒数,该方法可以抛出InterruptedException异常。因此,如果代码中用到了sleep()方法,那么我们的整个代码需要try{}···catch(InterruptedException){}包围来捕获该异常*/
java.lang.Thread
static void sleep(long mills)
/*创建一个新线程,用来调用给定对象的run()方法,该对象所对应的类需要实现Runnable接口并重写run()方法*/
java.lang.Thread
Thread(Runnable target)
/*该方法用来启动线程,并引发调用run()方法。其会立即放回并且新新线程会并行执行*/
java.lang.Thread
void start()
/*该方法用于调用关联接口Runnable中的run()方法,实际调用的是重新实现了该接口的类中的run()方法*/
java.lang.Thread
void run()
/*向线程发送中断请求,如果该线程正处在休眠或阻塞状态,则抛出InterruptedException异常,否则将中断状态置为true并中断线程*/
java.lang.Thread
void interrupt()
/*测试当前线程是否被中断,该方法调用会将当前线程的中断状态置为false*/
java.lang.Thread
static boolean interrupted()
/*作用同上,但其调用并不会将当前的中断状态置为false*/
boolean isInterrupted()
/*返回代表当前执行线程的Thread对象*/
java.lang.Thread
static Thread currentThread()
java.lang.Thread
/*这两个方法都有可能抛出InterruptedException异常*/
/*等待终止指定的线程*/
void join()
/*等待终止指定的线程,或者等待指定线程运行mills毫秒*/
void join(long mills)
/*得到这一线程的状态(NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED)*/
java.lang.Thread
Thread.State getState()
多线程中常见代码结构
- 下面在一个单独线程中执行一个任务的简单过程
1). 将任务代码移到实现了Runnable接口的类的run方法中,接口如下
public interface Runnable
{
void run();
}
//实现该接口类的代码如下:
class MyRunnable implements Runnable
{
public void run()
{
/*任务代码*/
}
}
2). 创建一个类对象
Runnable r = new MyRunnable();
3). 由Runnable创建一个Thread对象
Thread t = new Thread(r);
4). 启动线程
t.start();
注:不要直接调用Thread类或Runnable对象中的run()方法,如果直接调用只会执行同一个线程中的任务,而不会启用新线程。只有调用Thread.start方法才会创建一个执行run()方法的新线程
- 中断线程常见代码结构
public void run()
{
try
{
···
while(!Thread.currentThread().isInterrupted()
&& more work to do)
{
/*任务代码*/
}
}
catch (InterruptedException e)
{
/*线程处于阻塞或休眠状态时,抛出该异常*/
}
finally
{
}
}
注:如果在run()方法中循环调用sleep()方法,则无法检测到中断状态。因为,当线程处于中断状态时,调用sleep()方法并不会导致休眠,而如果在休眠状态中断,则会抛出InterruptedException异常