java 线程百科_java线程(一)

java线程基础

什么是线程?

这里引用百度百科的一句话:“线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。”,简单来说线程cpu执行程序调度的最小单元。cpu通过调用执行一个个线程来促使程序能够正常运行。

线程、进程、应用程序之间的关系

在操作系统中一个进程就代表一个应用程序,如果将一个应用程序看做成一个实体的话,那进程就是一个正在运行的实体。一个应用程序中可以包含多个线程,同样进程中也可以包含多个线程,多个线程的组合称为了一个应用程序,如果一个应用程序中只有一个线程时,那改线程就是一个用用程序,我们称之为单线程程序!

java中如何创建线程

在java中有两种创建线程的方式,一种是实现Runnable接口的run()方法并将其对象实例传入Thread构造中来创建线程,一种是扩展Thread类的run方法来创建线程

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 new Thread(newRunnable() {2 public voidrun() {3 //省略该线程要执行的代码

4 }5 }).start();

实现Runnable接口的方式

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

newThread(){

@Overridepublic voidrun() {//省略该线程要执行的代码

super.run();

}

}.start();

扩展Thread类的方式

Thread类是java API提供的线程类,其通过start()方法来启动线程,在线程启动后执行run()方法中的代码,当run()方法中的代码执行完成后线程结束。在以上两种创建线程的方式中推荐使用实现Runnable接口的方式创建线程,因为这种方式更符合面向对象思想,且不会破坏java API原有代码的设计结构,扩展Thread类的方式不仅破坏了Java API原有的设计结构且不符合面向对象的设计思想。而且在Thread类的原始run()方法中也是调用Runable接口的run()方法来实现线程内容代码的调用。

e38e93e7beeecc8b3c29b9d8e3f277a6.png

c8a2be3f0d1ae82f45cd8b8cec98cde9.png

线程的几种状态

线程大致上可以分为五种状态:创建、可运行(就绪)、阻塞(挂起)、运行、死亡。

创建:通过new Thread()来创建线程实例,但未调用start()方法。这时线程的实例已经被创建出来,但并没有启动该线程。

就绪:线程实例创建后调用start()方法。这时线程已经启动,可以被JVM调度交由cpu执行,但cpu目前并没有执行该线程。

运行:线程已经启动,且已被JVM调度交由cpu执行,cpu正在执行该线程。

阻塞:线程在运行时,调用线程对象的sleep()、join()方法或该线程已锁定的监视对象的wait()方法时现场进入阻塞状态,知道达到某种条件后进入就绪状态。

死亡:当线程对象的run()方法执行结束,或在执行过程中出现错误导致线程异常结束,这时线程处于死亡状态。

改变线程状态的几种方法详解

线程对象产生的方法

sleep():sleep方法使线程放弃cpu的使用权进入休眠状态一段时间,这段时间过后线程自动进入就绪状态。

join():join()方法使线程放弃cpu的使用权并加入另一该线程,当另一个线程运行结束进入死亡状态后该线程自动进入就绪状态,否则将一直处于阻塞状态。

yield():yield()方法使线程暂时放弃cpu的使用权进入就绪状态,但由于cpu的调度是随机的无法干预的所以有时yield()方法起不到任何效果。

start():start()方法使线程对象启动进入就绪状态。注意:start()方法只能在线程实例创建后调用一次,当线程进入死亡状态时则无法再调用start()方法使其进入就绪状态。

线程锁定监视对象产生的方法

wait():wait()方法使当前线程放弃cpu的使用权和该对象的锁,进入阻塞状态知道其他线程调用该对象的notify()或notifyall()方法后进入就绪状态。

notify():notify()方法检测该对象上是否有等待的线程,若有一个或多个则随机挑选一个线程使其进入就绪状态。没有则不进行任何操作。

notifyall():notifyall()方法检测该对象上是否有等待的线程,若有则使其全部进入就绪状态。没有则不进行任何操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值