Java之进程与线程

一、进程

这里写图片描述

二、线程

1.定义及特点

1)【定义】线程是一个进程内部的一条执行路径,Java虚拟机允许应用程序并发地运行多个执行路径

是系统独立调度和分派【CPU】的基本单位

2)特点

进程中执行运算的最小单位
处理机分配给线程,即真正在处理机上运行的是线程

2.主线程和子线程

这里写图片描述

3.子线程对象调用run() 和调用start()的区别

1 run() 相当于方法调用 ,不会创建新的栈空间,不会有新的子线程 
2 start() 开辟新的栈空间,会产生新的子线程  , 再帮助调用run方法执行

4.多线程

多线程就是在一个进程中创建多个线程,每个线程完成一个任务

优点

    多线程技术使程序的响应速度更快
    提高资源利用率
    程序设计更简单

特点

    随机性(异步执行):谁抢到cpu,谁执行
    宏观上同时执行,微观上同一时刻只能执行一个线程(多核除外)

5.进程和线程区别

1)进程有独立的地址空间,一个进程崩溃后,不会对其它进程产生影响,而线程只是一个进程中的不同执行路径

2)线程有自己的栈和局部变量,多个线程共享同一进程的地址空间

3)一个进程至少有一个线程

6.Java中创建线程

两种创建方法:

1)第一种:继承Thread类
2)第二种:实现Runnable接口

创建步骤

    1.定义线程
    2.创建线程对象
    3.启动线程
    4.终止线程

两种创建方法比较

1继承Thread 
    适合每个线程是独立执行,没有资源共享

2实现Runnable
    适合存在资源共享情况,要和Thread类结合使用

    资源共享分两种情况
        a.相同操作,同一个资源:操作代码和资源同一个类中,并实现Runnable接口

        b.不同操作,同一个资源:资源单独一个类,操作分别在不同类中,并实现Runnable接口

7.线程五种状态

新生状态、可运行状态、运行状态、阻塞状态和死亡状态

这里写图片描述

8.线程调度

这里写图片描述

1)线程调度的方法

join()方法

阻塞指定的线程等到另一个线程完成以后再继续执行
public final void join();
public final void join(long mills);
public final void join(long mills,int nanos);
实现的效果:调用join()_方法的线程对象会插队到当前线程的前面(即先执行)

sleep()方法

当前线程在指定毫秒内停止执行而转入不可运行状态
public static void sleep(long millis); 

yield()方法

当前线程转入暂时停止运行的状态
public static void yield();

2)sleep()与yield()的区别

这里写图片描述

9.线程终止

1.标志位,可以使run()方法正常执行完
2.stop()方法强行终止线程【不推荐】
3.interrupt()方法通过抛异常的方式 打断线程的执行

10.其他

【获取当前线程名字】Thread.currentThread().getName() (通用)
子类线程中可直接使用getName()获取当前线程名称
【线程命名】调用Thread类中的setName 改变线程的名字
原文地址:https://www.cnblogs.com/TCB-Java/p/6797622.html