线程知识小结一

线程知识小结一

一、线程的创建

1.继承Thread类创建多线程

定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的start()方法


2.实现Runnable接口创建多线程

定义一个实现Runnable接口的类并实现run()方法,创建该类的实例对象,将其作为参数传递给Thread类的构造方法来创建Thread对象,调用Thread对象的start()方法


两种方式的对比:

继承Thread类创建的多个线程不会共享同一资源而通过实现Runnable接口创建多个线程是共享同一资源的。

方法2的好处:

1)适合多个相同的程序代码的线程去处理同一个资源的情况,把线程同程序代码、数据有效的分离,很好的体现了面向对象的设计思想

2)可以避免由于java的单继承带来的局限性。就是使用一个已经继承了某一个类的子类创建线程,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式。


后台线程:

对java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中只有后台线程运行,这个进程就会结束。新建的线程都是默认为前台线程

设置线程为后台线程的方法:在线程对象启动之前调用setDaemon(true),也就是说setDaemon()必须在start()之前调用,否则会引发IllegalThreadStateException异常

二、线程的生命周期


需要注意的是:线程从阻塞状态只能进入就绪状态,而不能直接进入运行状态,也就是说结束阻塞的线程需要重新进入到可运行池中,等待线程的调度


三、线程调度

计算机中,线程调度分两种模型:
1)分时调度
让所有的线程轮流获得CPU的使用权,并且平均分配每个线程占用的CPU的时间片
2)抢占式调度
让可运行池中优先级高的线程优先占用CPU,而对于优先级相同的线程,随机选择一个线程使其占用CPU,当它失去了CPU的使用权后,再随机选择其他线程获取CPU使用权。

Java虚拟机默认采用抢占式调度模型。


四、线程优先级

线程优先级1-10
static int MAX_PRIORITY  表示线程的最高优先级,相当于值10
static int MIN_PRIORITY   表示线程的最低优先级,相当于值1
static int NORM_PRIORITY 表示线程的普通优先级,相当于值5
使用Thread类的setPriority(int new Priority)设置线程优先级


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值