zoukankan      html  css  js  c++  java
  • Java 基础(Thread类的有关方法,线程的调度)

    Thread类的有关方法

    • void start(): 启动线程,并执行对象的run()方法
    • run(): 线程在被调度时执行的操作
    • String getName(): 返回线程的名称
    • void setName(String name): 设置该线程名称
    • static Thread currentThread(): 返回当前线程。在 Thread子类中就是this,通常用于主线程和Runnable实现类
    • static void yield(): 线程让步
    1. 暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
    2. 若队列中没有同优先级的线程,忽略此方法
    • join():当某个程序执行流中调用其他线程的 join()方法时,调用线程将被阻塞,直到join()方法加入的 join线程执行完为止
    1. 低优先级的线程也可以获得执行
    • static void sleep(long millis):(指定时间:毫秒)
    1. 令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
    2. 抛出 InterruptedException异常
    • stop(): 强制线程生命期结束,不推荐使用
    • boolean isAlive(): 返回 boolean,判断线程是否还活着

    调度策略

    1. 时间片
    2. 抢占式: 高优先级的线程抢占CPU

    Java的调度方法

    1. 同优先级线程组成先进先出队列(先到先服务),使用时间片策略
    2. 对高优先级,使用优先调度的抢占式策略

    线程作优先级

    • 线程的优先级等级

    MAX_PRIORITY: 10
    MIN_PRIORITY: 1
    NORM_PRIORITY: 5

    • 涉及的方法

    getPriority(): 返回线程优先值
    setPriority(int newPriority): 改变线程的优先级

    • 说明

    线程创建时继承父线程的优先级
    低优先级只是获得调度的概率低,并非一定是在高优先级线程之后才被调用

    package com.klvchen.java;
    
    /**
     * @author klvchen
     * @create 2021-04-07-15:39
     * 测试Thread中的常用方法:
     * 1. start():启动当前线程;调用当前线程的run()
     * 2. run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
     * 3. currentThread():静态方法,返回执行当前代码的线程
     * 4. getName():获取当前线程的名字
     * 5. setName():设置当前线程的名字
     * 6. yield():释放当前cpu的执行板
     * 7. join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才
     *    结束阻塞状态。
     * 8. stop():已过时。当执行此方法时,强制结束当前线程。
     * 9. sleep(Long millitime):让当前线程 "睡眠" 指定的 millitime 毫秒。在指定的 millitime 毫秒时间内,当前
     *    线程是阻塞状态。
     *
     */
    
    class HelloThread extends Thread{
        @Override
        public void run(){
            for (int i = 0; i < 100; i++){
                if (i % 2 == 0){
    
    //                try {
    //                    sleep(10);
    //                } catch (InterruptedException e) {
    //                    e.printStackTrace();
    //                }
    
                    System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i);
                }
    
    //            if (i % 20 == 0){
    //                this.yield();
    //            }
            }
        }
    
        public HelloThread(String name){
            super(name);
        }
    
    }
    
    public class ThreadMethodTest {
        public static void main(String[] args){
    
            HelloThread h1 = new HelloThread("Thread:1");
    
    //        h1.setName("线程一");
    
            //设置分线程的优先值
            h1.setPriority(Thread.MAX_PRIORITY);
    
            h1.start();
    
            //给主线程命名
            Thread.currentThread().setName("主线程");
            Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
    
            for (int i = 0; i < 100; i++){
                if (i % 2 == 0){
                    System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i);
                }
    
    //            if(i == 20){
    //                try {
    //                    h1.join();
    //                }catch (InterruptedException e){
    //                    e.printStackTrace();
    //                }
    //            }
    
            }
    
            System.out.println(h1.isAlive());
        }
    }
    
  • 相关阅读:
    python学习笔记
    win10优化设置
    jpa基本用法
    5_方法(函数)、参数传递
    12_文件基本权限
    10_管理用户和组
    9_用户和组的相关配置文件
    7_vim 编辑器使用技巧
    8_Xmanager 远程连接 Linux 系统工具使用方法
    5_Linux系统目录结构,相对/绝对路径
  • 原文地址:https://www.cnblogs.com/klvchen/p/14627870.html
Copyright © 2011-2022 走看看