Java学习day46-Thread类的相关方法和线程的生命周期

一、Thread类的有关方法(1)

1.void start()::启动线程,并执行对象的run()方法

2.run():线程在被调度时执行的操作

3.String getName():返回线程的名称

4.void setName(String name):设置该线程名称

5.static currentThread():返回当前线程

二、线程的优先级

1.线程的优先级控制:

  ①MAX_PRIORITY(10);

  ②MIN_PRIORITY(1);

  ③NORM_PRIORITY(5);

2.涉及的方法

  ①getPriority():返回线程优先值

  ②setPriority(int newPriority):改变线程的优先级

  ③线程创建时继承父线程的优先级

三、Thread类的有关方法(2)

1.static void yield():线程让步

  ①暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程

  ②若队列中没有同优先级的线程。忽略此方法

2.join():当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到join()方法加入的join线程执行完为止

  ①优先级低的线程也可以获得执行

3.static void sleep(long millis):(指定时间:毫秒)

  ①令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。

  ②抛出InterruptedException异常

4.stop():强制线程生命期结束

5.boolean isAlive():返回boolean,判断线程是否还活着

package day20;

public class Test1 {
    public static void main(String[] args){
        TestRun run0 = new TestRun();
        TestRun run1 = new TestRun();
        
        Thread t0 = new Thread(run0);
        
        Thread t1 = new Thread(run1);
        
        t0.setName("线程T-0");//设置线程的名称
        t1.setName("线程T-1");
        
//        t0.setPriority(1);//设置线程的优先级
//        t1.setPriority(10);
        
        t0.start();
        t1.start();
        
        System.out.println(t0.getName());//如果在创建线程的时候没有指定名称,系统会给出默认名称,通过getName()获取线程名称
        System.out.println(t1.getName());
        
        /**
         * 线程的优先级,就是哪个线程有较大的概率被执行
         * 优先级是用数字1-10表示,数字越大,优先级越高,如果没有设置,默认优先级是5
         */
        System.out.println("t0的优先级:" + t0.getPriority());//获取线程的优先级
        
        System.out.println("-------------------1");
        System.out.println("-------------------2");
        
        System.out.println(t1.isAlive());//判断当前的线程是否存活
        t1.stop();//强制线程生命期结束,强制停止此线程
        try {
            t0.join();//相当于在这块把t0的run方法的代码插入到这个位置执行
            /**
             * 阻塞当前的main方法,先不执行System.out.println("-------------------3");代码
             * 先执行join进来的线程的代码
             * */
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("-------------------3");
    }
}
class TestRun implements Runnable{
    int count = 0;
    public void run() {
        // TODO Auto-generated method stub
        System.out.println(Thread.currentThread().getName() + ":Runnable多线程运行的代码");
        for(int i = 0; i < 5; i++){
            try {
                Thread.sleep(1000);//当前线程睡眠1000毫秒,相当于当前的这个循环,每隔1000毫秒执行一次
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
//            if(i % 2 ==0){
//                Thread.yield();//线程让步
//            }
            
            count ++;
            System.out.println(Thread.currentThread().getName() + ":这是Runnable多线程的逻辑代码:" + count);
        }
    }
    
}

打印结果:

四、线程的生命周期

1.JDK中用Thread.State枚举表示了线程的几种状态。

2.想要实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:

  ①新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。

  ②就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件。

  ③运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态,run()方法定义了线程的操作和功能。

  ④阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入了阻塞状态。

  ⑤死亡:线程完成了它的全部工作或线程被提前强制性的终止。

猜你喜欢

转载自www.cnblogs.com/su-peng/p/12630901.html
今日推荐