1、什么是进程?什么是线程?
进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内存共享,但是栈内存独立,一个线程一个栈。
2、线程状态
创建状态
在程序中用构造方法创建一个线程对象后,新的线程对象便处于新建状态,此时,它已经有了相应的内存空间和其他资源,但还处于不可运行状态。
创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。
就绪状态
新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待CPU调度服务,这表明它已经具备了运行条件。
运行状态
当就绪状态的线程被调用并获得处理器资源时,线程就进入运行状态。此时将自动调用该线程对象的run()方法,run()方法定义了该线程的操作和功能。
阻塞状态
一个正在运行的线程在某些特殊情况下,如被人为挂起或需要运行耗时的输入/输出操作时,将让出CPU并暂时中止自己的运行,进入阻塞状态。在可运行状态下,如果调用sleep()、suspend()、wait()等方法,线程将进入阻塞状态。阻塞时,线程不能进入排队队列,只有当引起阻塞的原因被消除后,线程才可以转入就绪状态。
终止状态
当线程体中的run()方法运行结束后,线程即处于终止状态,处于终止状态的线程不具有继续运行的能力。
3、关于线程常用的方法、
Thread方法
public Thread(Runnable target,String name)
1、构造方法;
2、接收两个参数:Runnable接口子类对象及线程名称;
3、作用:实例化线程对象,同时设置线程名称;
setName方法
public final void setName(String name);
1、普通方法;
2、接收一个参数;
3、无返回值;
4、作用:设置线程名称;
getName方法
public final String getName();
1、普通方法;
2、无参;
3、有返回值:返回值类型String;
4、作用:获得线程名称;
currentThread方法
public static Thread currentThread();
1、静态方法;
2、无参;
3、有返回值:返回值Thread类型的对象;
4、获取当前线程对象;
sleep方法
static void sleep(long millis)
1、静态方法:Thread.sleep(1000);
2、参数是毫秒;
3、作用:让当前线程进入休眠,进入“阻塞状态”,放弃占用CPU时间片,让给其他线程使用。
4、Thread.sleep(1000)方法,可以做到这种效果:间隔特定的事件,去执行一段特定的代码;每隔多久执行一次。
isInterrupted方法
public boolean isInterrupted();
1、普通方法;
2、无参;
3、有返回值:返回值类型Boolean;
4、作用:判断线程是否被中断;
interrupt方法
public void interrupt();
1、普通方法;
2、无参;
3、无返回值;
4、作用:中断线程执行;
join方法
public final void join();
1、普通方法;
2、无参;
3、无返回值;
4、作用:强制执行某个线程,待其执行完毕后其他线程再继续执行;
yield方法
public static void yield();
1、静态方法;
2、无参;
3、无返回值;
4、作用:将当前的调度让给其他线程执行,自己再等待下次调度再执行。线程状态从运行状态回到就绪状态。
setPriority方法
public final void setPriority(int newPriority);
1、普通方法;
2、有参:参数为给线程设置的优先级值;优先级有三种:最高优先级MAX_PRIORITY【对应数值为10】、中等优先级NORM_PRIORITY【对应数值为5】、最低优先级MIN_PRIORITY【对应数值为1】
3、无返回值;
4、作用:设置线程的优先级;
getPriority方法
public final int getPriority();
1、普通方法;
2、无参;
3、有返回值:返回值int类型的数值;
4、作用:获取线程的对应的优先级数值;
原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/java/multithreading.html