线程的常用方法与生命周期
一、线程的常用结构
1.线程中的构造器
- public Thread() :分配一个新的线程对象。
-public Thread(String name) :分配一个指定名字的新的线程对象。
-public Thread(Runnable target) :指定创建线程的目标对象,它实现了Runnable接口中的run方法
-public Thread(Runnable target,String ame) :分配一个带有指定目标新的线程对象并指定名字。
2.线程中的常用方法:
>start():1.启动线程 2.调用线程的run()
> run():将线程要执行的操作,声明在run()中。
> currentThread():获取当前执行代码对应的线程
> getName():获取线程名
> setName ():修改线程名
例修改main线程名:Thread.currentThread().setName("主线程");
Sleep((long millis):静态方法,调用时,可以使得当前线程睡眠指定的毫秒数
yield():一旦执行此方法,就释放CPU的执行权;
join(): 在线程a中通过线程b调用join(),意味着线程a进入阻塞状态,直到线程b执行结束,线程a才结束阻塞状态,继续执行。
isAlive():判断当前线程是否存活
过时方法:
stop():强行结束一个线程的执行,直接进入死亡状态。不建议使用
void suspend() / void resume() :可能造成死锁,所以也不建议使用
线程的优先级:
分时调度:所有线程轮流使用、 CPU 的使用权,并且平均分配每个线程占用 CPU 的时间
抢占式调度:让,优先级高,的线程以“较大的概率优先使用 CPU。如果线程的优先级相同,那么会随机选择一个(线程随机性)
二、线程的生命周期
package Tese0621;
class EvenNumber0 extends Thread{
public EvenNumber0() {
}
public EvenNumber0(String name) {
super(name);
}
//输出100以内的偶数
public void run(){
for (int i = 0;i <= 100; i++){
if(i % 2 == 0){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
}
class EvenNumber1 extends Thread{
//输出100以内的奇数
public void run(){
for (int i= 1; i <= 100; i++){
if(i%2 != 0){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
}
public class PrintNumberTest {
public static void main(String[] args) {
// 方式1
EvenNumber0 e1 = new EvenNumber0("线程一");
// EvenNumber1 e2 = new EvenNumber1();
Thread.currentThread().setPriority(6);
// //线程1:打印偶数
e1.start();
// //线程2:打印奇数
// e2.start();
Thread.currentThread().setName("主线程");
int m = Thread.currentThread().getPriority();
for (int i= 1; i <= 100; i++){
if(i%2 != 0){
System.out.println(m + Thread.currentThread().getName()+"-->"+i);
}
}
//方式2:Thread类的匿名子类的匿名对象。
new Thread("线程二"){
public void run(){
Thread.currentThread().setPriority(6);
for (int i= 1; i <= 100; i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
if(i%2 != 0){
System.out.println(Thread.currentThread().getPriority() + Thread.currentThread().getName()+"-->"+i);
}
}
}
}.start();
}
}