Java学习

线程的常用方法与生命周期

一、线程的常用结构

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。如果线程的优先级相同,那么会随机选择一个(线程随机性)

 

 

 

二、线程的生命周期

Java学习_第1张图片

 

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();
    }
}

 

 

你可能感兴趣的:(java,算法,开发语言)