zoukankan      html  css  js  c++  java
  • Java多线程--基础(二)

    Thread类 API

    currentThread()

    返回当前正在执行的线程对象的引用。

    关于currentThread和this
    package ch01.test1;
    
    public class MyThread extends Thread {
        public MyThread() {
            System.out.println("MyThread begin");
            System.out.println("Thread.currentThread().getName()= "+Thread.currentThread().getName());
            System.out.println("this.getName()="+ this.getName());
            System.out.println("MyThread end");
        }
    
        @Override
        public void run() {
            super.run();
            System.out.println("run begin");
            System.out.println("Thread.currentThread().getName()= "+Thread.currentThread().getName());
            System.out.println("this.getName()="+ this.getName());
            System.out.println("run end");
        }
    }
    
    class Test {
        public static void main(String[] args) {
            MyThread myThread1 = new MyThread();
            Thread t1 = new Thread(myThread1);
            t1.setName("A");
            t1.start();
        }
    }
    
    MyThread begin
    Thread.currentThread().getName()= main
    this.getName()=Thread-0
    MyThread end
    run begin
    Thread.currentThread().getName()= A
    this.getName()=Thread-0
    run end
    

    实际上new Thread(myThread1)会将myThread1绑定到一个pravite变量target上,在t1被执行的时候即t1.run()被调用的时候,它会调用target.run()方法,也就是说它是直接调用myThread1对象的run方法,再确切的说,在run方法被执行的时候,this.getName()实际上返回的是target.getName(),而Thread.currentThread().getName()实际上是t1.getName()。

    isAilve()

    测试线程是否处于“活动状态”。“活动状态”是指线程处于runnable状态。

    sleep()

    当前正在执行的线程休眠(暂停执行)为指定的毫秒数。

    package ch01.test2;
    
    public class MyThread extends Thread {
        @Override
        public void run() {
            super.run();
            System.out.println(this.currentThread().getName()+" begin");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(this.currentThread().getName()+" end");
        }
    }
    
    class test2 {
        public static void main(String[] args) {
            MyThread myThread = new MyThread();
            System.out.println("begin = " + System.currentTimeMillis());
    //        体会直接调用run方法和调用start方法的区别
    //        myThread.run();
            myThread.start();
            System.out.println("end = " + System.currentTimeMillis());
        }
    }
    
    output1:直接调用run方法
    begin = 1599622708757
    main begin
    main end
    end = 1599622710757
    -------------------------------
    output2:调用start方法
    begin = 1599622604015
    end = 1599622604015
    Thread-0 begin
    Thread-0 end
    

    getID()

    获取线程的唯一标识

    作者:lykxbg —— 来一块小饼干

    出处:http://www.cnblogs.com/lykxbg/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    基于接口(工厂模式)三层架构的引用和访问流程
    数据库访问类小结
    是毁灭还是重生——从浏览器大战看未来软件发展
    Func,Action的介绍及其用法
    IIS发布程序后,出现“服务器应用程序不可用”的错误
    泛型委托 Action<T>和Func<T,TResult>
    IIS发布程序后,出现“服务器应用程序不可用”的错误
    利用winrar自动备份重要资料
    HDU 2795 Billboard
    HDU 1140 War on Weather
  • 原文地址:https://www.cnblogs.com/lykxbg/p/13640166.html
Copyright © 2011-2022 走看看