首页 > 学院 > 开发设计 > 正文

多线程(基本知识)

2019-11-06 06:31:52
字体:
来源:转载
供稿:网友

1,进程

对于一个CPU来讲在某一个时间点指定执行一个进程,操作系统会为每个进程分配一段有限的cpu使用时间

2,线程

每个程序都是一个进程,进程里面还可以有多个执行单元同时运行,这些执行单元可以看作执行的一条条线程

3,线程的创建

//第一种方法:通过继承Thread类来进行开启多线程package book;public class Threadtext { public static void main(String []args){ students stu=new students();//创建类的实例对象 stu.start();//开启students线程 while(true){ System.out.PRintln("我是main函数里面的输出语句"); } }}class students extends Thread{ public void run(){ while(true){ System.out.println("我是一个线程"); } }}//第二种方法:通过类实现Runnable接口,然后开启start();方法启动package book;public class Threadtext2 { public static void main(String[] args) { // TODO 自动生成的方法存根 student stu=new student();//创建类的实例对象 Thread th=new Thread(stu);//创建线程对象并把类的实例对象传入 th.start(); while(true){ System.out.println("我是主方法线程"); } }}class student implements Runnable{ public void run(){ while(true){ System.out.println("我是一个线程"); } }}

4,两种方法的对比

1,通过继承thread类开启的进程必须要进行实例化才能进行开启,在进行实例化的时候就必须创建了一个对象,如果开启对个实例化对象,那么每个都会重复地开启线程,所以不能在进行资源统一的时候使用2,实现Runnable接口的话仅仅开启线程的话,在开启一个新的线程的话参数传入的都是同一个实例对象,所以多个实例化对象使用的资源都是统一的3,由于java是单继承,所以在继承了Thread类后无法再次继承其他的类所以不建议使用第一种方法

5,线程的生命周期及状态转换

1,新建状态:在创建一个线程对象后,该线程就处于新建状态,他此时不能够运行,和其他的java程序一样,仅仅由java虚拟机为其分配了内存,但是没有表现出任何线程的动态信息。2,当线程调用了start方法后,该线程就进入了继续状态,也称作可运行状态,处于就绪状态的线程位于可运行池中,此时他仅仅是具备了可运行的条件,能否获得cpu使用权还需要等待系统进行调度。3,就绪状态:获得了cpu使用权,开始执行Run方法中的线程执行体,该线程处于运行状态。4,堵塞状态:正在运行的情况下,如执行耗时的输入、输出操作时就会放弃cpu的使用权力,线程进行堵塞状态后不能进入排队队列,只有当引起堵塞的因素消除后,线程才可能进入到就绪状态。5,死亡状态:线程中的run方法正常执行完毕,或者线程抛出一个未捕获的异常,错误,线程就会进入死亡状态,一旦进入死亡状态线程就不会再次拥有运行的资格,也不能转换到其他状态;

这里写图片描述 6,线程的调度

1,线程的优先级:通过实例对象.setPrority(参数);参数为1-10;2,线程的休眠:直接Thread(时间毫秒);休眠当前线程多少毫秒,会进入堵塞状态,结束后方可重新争取线程3,线程的让步:获得cpu使用权的的线程放弃使用重新参与竞争。使用Thread.yield();4,线程的插队:在执行一个线程的时候在中间插入"对象.join();"就会执行这个插入的线程,直到执行完毕后方可继续执行原来的线程
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表