Java多线程笔记

线程各个状态转换图

Java多线程笔记_第1张图片

多线程中常用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异常

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