线程学习一

线程的创建和启动

Java中jvm允许程序运行多个线程,通过java.lang.Thread类来实现

每个线程通过某个特定的Thread对象的run()方法来完成操作,经常把run()方法的主体叫做线程体

通过该Thread对象的start()方法来调用这个线程。

何时需要多线程?

程序需要同时执行两个或多个任务

程序需要实现一些需要等待的任务,如:用户输入、文件读写、网络操作、搜索

需要一些后台运行的程序

线程的创建与启动有两种方式:

方式一:

  继承Thread类

  在该子类重写run()方法

  创建Thread的子类对象

  使用 对象名.start() 启动该线程

方式二:

  实现Runnable接口

  该实现类重写run()方法

  创建实现类的对象

  创建Thread对象,将Runnable实现类对象作为实参放入Thread构造器中。如: Thread t = new Thread(Runnbale实现类对象名);

  调用Thread实例对象的start()方法启动该线程。如:t.start();

Thread类的相关方法

void start():启动线程,并执行对象的run方法

run():线程在被调度时执行的操作

String getName():返回线程的名称

void setName(String name):设置该线程的名称

static currentThread():返回当前线程

static void yield():线程让步  暂停当前的线程当前线程返回就绪队列等待cpu重新调度

join():线程插队  例如在A线程正在执行时遇到 B.join() 则A线程停止运行等待B线程执行完毕以后再执行。

static void sleep(long millis):(指定时间:毫秒)当前线程调用sleep之后将放弃对CPU的控制,但不释放资源,待到指定时间过后再进入就绪队列重新排队等待被调用。

stop():强制线程生命期结束

boolean isAlive():返回一个boolean类型的值,判断线程是否还活着

int getPriority():返回线程的优先级

int setPriority(int newPriority):改变线程的优先级为newPriority

  线程的优先级1-10,数字越大优先级越高,Thread类中的优先级常量

    MAX_PRIORITY  10

    MIN_PRIORITY  1

    NORM_PRIORITY  5  

  默认的线程优先级为5

多线程程序的优点

1、提高程序响应时间,提高用户的体验度

2、提高CPU的利用率

3、改善程序结构,将既长又复杂的进程分为多个线程,独立运行,便于理解和修改

守护线程

线程分为守护线程和用户线程,守护线程是为用户线程服务的

jvm必须要等到用户线程执行完毕之后才能停止,但jvm不需要等到守护进程完全执行完毕即可退出

通过在调用start()方法前,使用 线程名.setDaemon(true); 将该线程设置为守护线程

线程的生命周期

线程的声明周期分为这几个阶段:

当一个Thread或Thread的子类被实例化的时候就进入新建状态

当调用start()方法后就进入就绪状态等待CPU的调度,一旦得到CPU的调度后就进入运行状态

运行状态下如果该线程调用了yield()方法则重新进入就绪队列等待CPU的调度;如果调用了wait()、join()、sleep()、suspend()方法则进入阻塞状态,待到阻塞解除的合适条件(如:sleep指定的时间过后;wait方法阻塞的线程被notify()或notifyAll()方法唤醒)则重新进入就绪队列;在运行状态下如果调用了stop()或出现错误或者异常或线程体执行完毕则进入死亡状态。

猜你喜欢

转载自www.cnblogs.com/qust-lgh/p/10315432.html