浅谈进程和线程

进程和线程

什么是进程?

正在运行的程序,操作系统进行资源分配的基本单位

操作系统目前通过PID(process id)对多个进程进行区分
浅谈进程和线程_第1张图片

什么是线程?

俗称轻量级进程,是进程中一条执行路径,是cpu的基本调度单位,一个进程由一个多线程组成,每个线程完成不同的工作

多线程实际上是宏观上并行,微观上串行

浅谈进程和线程_第2张图片

举个例子:
JVM是一个进程,当中默认包含主线程main,可通过代码创建多个独立线程,与main并发执行

线程的组成

  • cpu时间片
  • 运行数据
    1. 堆空间:存储线程要用的对象,多个线程可以共享堆中的对象
    2. 栈空间:存储线程要用的局部变量,每个线程有独立的栈

线程状态

浅谈进程和线程_第3张图片

线程常用方法

  1. 更改线程优先级
setPriority(int newPriority)
  1. 当前执行线程体休眠指定时间(毫秒数)
    存在异常InterruptedException
    休眠时间结束后,线程进入就绪状态

每个对象都有一把锁,sleep不会释放这把锁

static void sleep(long millis)
  1. 插队
void join()
  1. 暂停正在执行的线程对象,并执行其他线程
static void yield()
  1. 中断线程(建议不要使用这种方法使线程停止)
void interrupt()

建议让线程正常停止,不要死循环,或者使用一个标志位进行终止变量,从而使线程停止

public class Demo implements Runnable {
    private boolean flag = true;

    @Override
    public void run() {
        int i = 0;
        while(flag){
            System.out.println("thread"+i++);
        }
    }

    public void stop(){
        this.flag = false;
    }
    public static void main(String[] args) {
        Demo demo = new Demo();
        new Thread(demo).start();

        for (int i = 0; i < 1000000; i++) {
            if(i==999999) {
                demo.stop();
                System.out.println("stop it...");
            }
        }
    }
}

浅谈进程和线程_第4张图片

  1. 测试线程是否存活
boolean isAlive()

两者区别

进程是操作系统进行资源分配的基本单位

线程是cpu的基本调度单位

程序运行后至少有一个进程,而一个进程至少需要一个线程

同进程的线程间可以共享数据段地址,进程间不能共享

你可能感兴趣的:(Java,操作系统,多线程,java,操作系统)