Java中的多线程(概念与原理)

程序、进程、线程的概念

1)程序:是为了完成特定任务,用一段静态的代码编写的一组指令的集合。
2)进程:是程序的一次执行过程,或者是正在运行的一个程序,比如正在运行的qq。
3)线程:进程可进一步细化为线程,是一个程序内部的一条执行路径。如果一个程序可同一时间执行多个线程,就是支持多线程的。一个程序至少一个进程,一个进程至少一个线程。

何时需要多线程

1)程序需要同时执行两个或多个任务(程序之间需要共享数据)。
2)程序需要实现一些需要等待的任务时比如:用户输入、文件读写操作

线程总体分两类

1)用户线程:平时创建的普通线程均是用户线程
2)守护线程:当所有用户线程执行完毕的时候,JVM自动关闭。但是守候线程却不独立于JVM,守护线程一般是由操作系统或者用户自己创建的。设置线程的Daemon为true,且必须在thread.start()之前设置,这就是创建一个守护线程。
它们在几乎每个方面都是相同的,唯一的区别是判断JVM何时离开。
Java垃圾回收就是一个典型的守护线程。

多线程的创建和启动

1)Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现
2)Thread类的特性
每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体。
通过该Thread对象的start()方法来调用这个线程。

Thread类的构造方法

1)Thread():创建新的Thread对象
2)Thread(String threadname):创建线程并指定线程实例名
3)Thread(Runnable target):创建线程的目标对象,它实现了Runnable接口中的run方法(常用

创建线程的两种方式(继承Thread类)

1)继承Thread类,也就是说定义子类继承Thread类
2)子类中需要重写Thread类中的run方法
3)创建Thread子类对象,即创建了线程对象。
4)调用线程对象start方法:启动线程,调用run方法

Thread类常用方法

1)void start(): 启动线程,并执行对象的run()方法
2)run(): 线程在被调度时执行的操作
3)String getName(): 返回线程的名称
4)void setName(String name):设置该线程名称
5)static currentThread(): 返回当前线程
6)boolean isAlive():返回boolean,判断线程是否还活着
7)static void yield():线程让步 暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
8)getPriority() :返回线程优先值 优先级高低值
9)setPriority(int newPriority) :改变线程的优先级
10)static void sleep(long millis):(指定时间:毫秒)当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,

创建线程的两种方式(实现Runnable接口)

1)定义子类,实现Runnable接口
2)子类中重写Runnable接口中的run方法
3)通过Thread类含参构造器创建线程对象。
4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法中因为启动线程必须从Thread类入手
5)调用Thread类的start方法:开启线程,调用 Runnable子类接口的run方法。run方法内完成子线程要完成的功能

线程的继承方式和实现方式两者的联系与区别

public class Thread extends Object implements Runnable
联系:Thread类其实是继承Object并实现Runable接口也就是说当子类继承了Thread类的同时也实现了Runnable接口,所才会需要重写run方法。
区别:
继承Thread: 线程代码存放Thread子类run方法中。
实现Runnable:线程代码存在接口的子类的run方法

这两种方法那种方法比较好:一般来说实现Runnable接口的情况用的比较多
1)java是单继承多实现,采用实现的方法能有效避免了单继承的局限性
2)多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。说白了就是资源共享

线程的生命周期

JDK中用Thread.State枚举表示了线程的几种状态
线程的生命周期中通常要经历如下的五种状态:
1)新建: 当一个Thread类或其子类的对象被声明并创建时,
2)就绪:新建的线程被start()后,进入线程队列等待,此时被start()后,此时当前线程就具备了运行的状态
3)运行:当就绪的线程获得处理器资源时,便进入运行状态,运行run方法 run()方法定义了线程的操作和功能
4)阻塞:线程,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态
5)死亡:线程完成了它的全部工作

线程状态转换图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值