Java多线程笔记

来源:互联网 发布:java做的图书管理系统 编辑:程序博客网 时间:2024/06/01 08:01

线程各个状态转换图

这里写图片描述

多线程中常用API总结

/*Thread类的静态sleep方法将暂停当前线程给定的毫秒数,该方法可以抛出InterruptedException异常。因此,如果代码中用到了sleep()方法,那么我们的整个代码需要try{}···catch(InterruptedException){}包围来捕获该异常*/java.lang.Threadstatic void sleep(long mills)
/*创建一个新线程,用来调用给定对象的run()方法,该对象所对应的类需要实现Runnable接口并重写run()方法*/java.lang.ThreadThread(Runnable target)
/*该方法用来启动线程,并引发调用run()方法。其会立即放回并且新新线程会并行执行*/java.lang.Threadvoid start()
/*该方法用于调用关联接口Runnable中的run()方法,实际调用的是重新实现了该接口的类中的run()方法*/java.lang.Threadvoid run()
/*向线程发送中断请求,如果该线程正处在休眠或阻塞状态,则抛出InterruptedException异常,否则将中断状态置为true并中断线程*/java.lang.Threadvoid interrupt()
/*测试当前线程是否被中断,该方法调用会将当前线程的中断状态置为false*/java.lang.Threadstatic boolean interrupted()/*作用同上,但其调用并不会将当前的中断状态置为false*/boolean isInterrupted()
/*返回代表当前执行线程的Thread对象*/java.lang.Threadstatic Thread currentThread()
java.lang.Thread/*这两个方法都有可能抛出InterruptedException异常*//*等待终止指定的线程*/void join()/*等待终止指定的线程,或者等待指定线程运行mills毫秒*/void join(long mills)
/*得到这一线程的状态(NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED)*/java.lang.ThreadThread.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异常

0 0
原创粉丝点击