• java线程


    Thread.currentThread方法

    Thread的静态方法currentThread方法可以用于获取运行当前代码片段的线程。

    Thread current = Thread.currentThread();

    public class CurrentThreadDemo {
    public static void main(String[] args) {
    //获取运行main方法的线程
    Thread main = Thread.currentThread();
    System.out.println("运行main方法的线程是:" + main);
    }
    }

    输出:Thread[main,5,main]

    分别输出的是:线程名字,线程优先级,线程所在的组。

    系统自动给线程去的名字是Thread-0,Thread-1

    package thread;
    /**
    * sleep方法要求必须处理终端异常:InterruptedException
    * 当我们调用一个线程的interrupted方法时,可以中断一个
    * 正在运行的线程,但是若该线程正处于阻塞时,那么调用该方法并不是
    * 中断开线程,而仅是中断其阻塞状态,这是会抛出异常,
    * 通知程序该线程的阻塞状态被中断。
    *
    * @author 小明
    *
    */
    public class SleepDemo2 {
    public static void main(String[] args) {
    Thread lin = new Thread(){
    public void run()
    {
    System.out.println("林:刚美完容,谁一会吧");
    try {
    /**
    * 在阻塞过程中当前线程被中断,那么
    * 会中断阻塞状态并抛出异常
    */
    Thread.sleep(1000*60*60);
    } catch (InterruptedException e) {
    System.out.println("林:干嘛呢!干嘛呢!都破了相了");
    }
    System.out.println("林:醒了");
    }
    };

    Thread huang = new Thread(){
    public void run()
    {
    System.out.println("黄:开始砸墙!");
    for(int i = 0; i < 5; i++)
    {
    System.out.println("黄:80!");
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    System.out.println("咣当!");
    System.out.println("黄:搞定!");
    lin.interrupt();
    //这里不要写成lin.interrupted()了
    }
    };

    lin.start();
    huang.start();
    }
    }

    main线程一定一个前台线程。因为守护线程在没有前台线程的情况下会自动结束运行。

    main线程是最先结束了。

    package thread;
    /**
    * 守护线程
    * 守护线程又称为后台线程。默认创建出来的线程都是前台线程
    * 后台线程是需要在线程启动前单独进行设置的。
    * 设置的方法为:
    * void setDaemon(boolean on)
    * 当参数为true时,该线程被设置为守护线程(后台线程)
    *
    * 在使用上前台线程与后台线程没有什么区别,但是在结束实际上有一个不同
    * 即:当进程结束时,所有还在运行的守护线程都会被强制中断。
    * 进程的结束:当一个进程中的所有前台线程都结束时,进程结束。
    *
    * 只要没有前台进程了,守护线程就会强制被结束。守护的是前台线程。
    *
    * @author 小明
    *
    */
    public class DaemonThreadDemo {
    public static void main(String[] args) {
    Thread rose = new Thread(){
    public void run()
    {
    for(int i = 0; i < 5; i++)
    {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println("跳");
    }
    System.out.println("噗通!");
    }
    };

    Thread jack = new Thread(){
    public void run()
    {
    while(true)
    {
    try {
    Thread.sleep(1000);
    System.out.println("jack:you junmp!");
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }
    };
    jack.setDaemon(true);//设置为守护线程。
    rose.start();
    jack.start();
    // /*while(true)
    // {
    // //如果主线程还没有结束,那么守护线程是不会结束的。因为主线程是前台进程。
    // }*/

    System.out.println("main线程结束了!");
    }
    }

    main线程结束了不代表程序结束了,只要还有线程池中所有线程结束了,程序才结束。

    只要还有前台线程没有结束,程序就不会结束。

    yield方法

    调用这个方法,主动让出CPU时间片。

    该方法用于使当前线程主动让出当次CPU时间片回到Runnable状态,等待分配时间片。

    join方法

    Thread的方法join:

    --void join()
    该方法用于等待当前线程结束。

    该方法声明抛出InterruptException。

    单线程就是同步执行。

    join()允许一个线程在另一个线程结束之后再运行。

  • 相关阅读:
    VS Code 中文显示乱码_ubuntu
    解决source insight不识别.cu文件的问题/sourceinsight设置.cu类型的文件
    PPT图片素材
    Jetson Xavier NX apt更换国内源
    xavier NX安装torchvision
    xavier NX上安装pytorch_前面一二三四是失败的方法,可以直接按照步骤五进行安装
    jquery.cookie()方法
    JavaScript错误处理
    Jquery中$.post()与$.get()区别
    jQuery中$.get()、$.post()和$.ajax()
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9597581.html
Copyright © 2020-2023  润新知