线程、程序、进程基本概念

线程、程序、进程基本概念

线程与进程相似,但线程是CUP调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程在执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程或是各个线程之间切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

程序是含又指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程是程序的⼀次执⾏过程,是系统运⾏资源分配和调度的基本单位,因此进程是动态的。系统运⾏⼀个程序即是⼀个进程从创建,运⾏到消亡的过程。简单来说,⼀个进程就是⼀个执⾏中的程序,它在计算机中⼀个指令接着⼀个指令地执⾏着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,⽂件,输⼊输出设备的使⽤权等等。换句话说,当程序在执⾏时,将会被操作系统载⼊内存中。 线程是进程划分成的更⼩的运⾏单位。线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。从另⼀⻆度来说,进程属于操作系统的范畴,主要是同⼀段时间内,可以同时执⾏⼀个以上的程序,⽽线程则是在同⼀程序内⼏乎同时执⾏⼀个以上的程序段。

线程有哪些基本状态

线程是一个动态执行的过程,它有一个从产生到死亡的过程,共五种状态

  • 新建(new Thread)

    当创建 Thread 类的一个实例(对象)时,此线程进入新建状态(未被启动)

    例如:Thread t1=new Thread();

  • 就绪(runnable)

    线程已经被启动,正在等待被分配给 CPU 时间片,也就是说此时线程正在就绪队列中排队等候得到 CPU 资源。例如:t1.start();

  • 运行(running)

    线程获得 CPU 资源正在执行任务(run()方法),此时除非此线程自动放弃CPU 资源或者有优先级更高的线程进入,线程将一直运行到结束。

  • 死亡(dead)

    当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

    自然终止:正常运行 run()方法后终止

    异常终止:调用 stop()方法让一个线程终止运行

  • 堵塞(blocked)

    由于某种原因导致正在运行的线程让出 CPU 并暂停自己的执行,即进入堵

    塞状态。

    正在睡眠:用 sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

    正在等待:调用 wait()方法。(调用 motify()方法回到就绪状态)

    被另一个线程所阻塞:调用 suspend()方法。(调用 resume()方法恢复)

线程创建之后它将处于 NEW(新建) 状态,调⽤ start() ⽅法后开始运⾏,线程这时候处于READY(可运⾏) 状态。可运⾏状态的线程获得了 cpu 时间⽚(timeslice)后就处于 RUNNING(运⾏) 状态。当线程执⾏ wait() ⽅法之后,线程进⼊ WAITING(等待)状态。进⼊等待状态的线程需要依靠其他线程的通知才能够返回到运⾏状态,⽽ TIME_WAITING(超时等待) 状态相当于在等待状态的基础上增加了超时限制,⽐如通过 sleep(long millis) ⽅法或 wait(long millis) ⽅法可以将 Java线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调⽤同步⽅法时,在没有获取到锁的情况下,线程将会进⼊到 BLOCKED(阻塞) 状态。线程在执⾏Runnable 的 run() ⽅法之后将会进⼊到 TERMINATED(终⽌) 状态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值