1.currentThread()

  1. public class Thread14 extends Thread{
  2. static {
  3. System.out.println("静态块的打印:" + Thread.currentThread().getName());
  4. }
  5. public Thread14() {
  6. System.out.println("构造方法的打印: " + Thread.currentThread().getName());
  7. }
  8. public void run() {
  9. System.out.println("run()方法的打印:" + Thread.currentThread().getName());
  10. }
  11.  
  12. //test
  13. public static void main(String[] args) {
  14. Thread14 thread14 = new Thread14();
  15. thread14.start();
  16. }
  17.  
  18. }

运行结果:

静态块的打印:main
构造方法的打印: main
run()方法的打印:Thread-0

这个例子说明了,线程的构造方法、静态块是被main线程调用的,而线程类的run()方法才是应用线程自己调用的。

  1. public class Thread15 extends Thread{
  2.  
  3. public Thread15() {
  4. System.out.println("thread15 ---->begin");
  5. System.out.println("Thread.currentThread().getName()----->" + Thread.currentThread().getName());
  6. System.out.println("this.getName()----->" + this.getName());
  7. System.out.println("thread15---->end");
  8. }
  9.  
  10. public void run() {
  11. System.out.println("run------->begin");
  12. System.out.println("Thread.currentThread.getName()---->" + Thread.currentThread().getName());
  13. System.out.println("this.getName()------>" + this.getName());
  14. System.out.println("run------>end");
  15. }
  16. public static void main(String[] args) {
  17. Thread15 thread15 = new Thread15();
  18. thread15.start();
  19. }
  20. }

运行结果:

  1. thread15 ---->begin
  2. Thread.currentThread().getName()----->main
  3. this.getName()----->Thread-0
  4. thread15---->end
  5. run------->begin
  6. Thread.currentThread.getName()---->Thread-0
  7. this.getName()------>Thread-0
  8. run------>end

当在执行Thread15 thread15 = new Thread15()的时候,this.getName也就是当前线程却是Thread-0.

2.sleep(long millions)

该方法的作用是在指定的时间内让当前正在执行的线程Thread.currentThread()暂停执行,也就是休眠。值得注意的一点是,该方法并不让出cpu资源,换句话说,也就是CPU依然在执行run()中的内容,无非这个内容是休眠而已。

  1. public class Thread16 extends Thread{
  2. public void run() {
  3. try{
  4. System.out.println("run threadName= " + this.getName() + " begin");
  5. Thread.sleep(20000);
  6. System.out.println("run threadName= " + this.getName() + " end");
  7. }catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. public static void main(String[] args) {
  12. Thread16 thread16 = new Thread16();
  13. System.out.println("begin= " + System.currentTimeMillis());
  14. thread16.start();
  15. System.out.println("end= " + System.currentTimeMillis());
  16. }
  17.  
  18. }

执行结果:

  1. begin= 1447813479735
  2. end= 1447813479736
  3. run threadName= Thread-0 begin
  4. run threadName= Thread-0 end

System.out.print是静态方法,因此输出的内容很快就会完成。启动的线程中有个休眠过程,thread-0 begin 和 thread-0 end 中间就会有等待。

3.yield()

  1. public class Thread17 extends Thread{
  2. public void run() {
  3. long beginTime = System.currentTimeMillis();
  4. int count = 0;
  5. for(int i = 0; i < 50000000; i++) {
  6. Thread.yield();//去掉之后明显整个程序运行时间剪短
  7. count = count + i + 1;
  8. }
  9. long endTime = System.currentTimeMillis();
  10. System.out.println("用时:" + (endTime - beginTime) + "毫秒" + count);
  11. }
  12.  
  13. public static void main(String[] args) {
  14. Thread17 thread17 = new Thread17();
  15. thread17.start();
  16. // Thread.currentThread().interrupt();
  17. // System.out.println("1---" + Thread.interrupted());
  18. // System.out.println("2---" + Thread.interrupted());
  19. }
  20.  
  21. }

yield()就是暂停当前执行的线程,并执行其他线程。这个暂停会是放弃cpu资源的,并且放弃cpu时间不确定,有可能刚放弃就又获得了。因此这里因为yield()方法中间消耗的时间也是不确定的。

4.interrupted()

  1. public static void main(String[] args) {
  2. // Thread17 thread17 = new Thread17();
  3. // thread17.start();
  4. Thread.currentThread().interrupt();
  5. System.out.println("1---" + Thread.interrupted());
  6. System.out.println("2---" + Thread.interrupted());
  7. }

测试当前线程是否已经中断,执行后就将状态标示改为false。因此,两次调用后返回必然为false

执行结果:

  1. 1---true
  2. 2---false

3.Thread中的静态方法的更多相关文章

  1. Java多线程4:Thread中的静态方法

    一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...

  2. Java多线程3:Thread中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

  3. java 多线程3:Thread类中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

  4. (二)线程Thread中的方法详解

    1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...

  5. 测试Thread中的常用方法

    package com.yhqtv.java; /* *测试Thread中的常用方法: * 1.start():启动当前线程:调用当前线程的run() * 2.run():通常需要重写Thread类的 ...

  6. 线程Thread中的方法详解(二)

    1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...

  7. java多线程2:Thread中的方法

    静态方法: Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程". 为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面 ...

  8. 测试Thread中的常用方法:

    测试Thread中的常用方法:start():启动当前线程:调用当前线程的run()run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中currentThread ...

  9. Java多线程2:Thread中的实例方法

    Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...

随机推荐

  1. WCF 学习笔记之双工实现

    WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...

  2. C#编写Windows 服务

    C#编写Windows 服务 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时 ...

  3. 真的了解js生成随机数吗

    由js生成一切随机数的基础都是Math.random()这个方法,这个方法比较特别,生成的随机数落在的区间是[0,1),进行一次操作的话,js只能生成一个类似于[n,m)这样,左闭右开的区间.所以当有 ...

  4. Java 集合:HashSet 与 ArrayList

    Set 集合是无序不可以重复的的.List 集合是有序可以重复的. Java 集合:HashSet 与 hashCode.equals 博客里面已经说到这个问题,但是解释的还是不够清楚. 看一个小例子 ...

  5. Mybatis学习笔记(四) 之动态SQL语句

    动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件 ...

  6. php集成环境和自己配置的区别,php集成环境、php绿色集成环境、php独立安装版环境这三者的区别

    最近有学生问我,直接使用PHP集成环境和我们自己独立安装的php环境有什么不一样吗? 答:PHP集成环境,和自己安装的php环境实际上没啥区别的,只不过大部分的集成环境进行了一些绿化操作,本质上没啥区 ...

  7. 【C#】Deep copy of objects

    If you learned C++ carefully, you must have known something about the copy of object. For example, I ...

  8. Gpt转mbr

    1)Shift + F10 2)diskpart 3)list disk 4)select dist 0 5)clean 6)convert mbr [注]mbr常用于windows操作系统,而gpt ...

  9. svn服务器搭建-SuSE Linux Enterprise Server 11 SP3

    svn存储版本数据也有2种方式: 1.bdb: 2.fsfs. 因为BDB方式在服务器中断时,有可能锁住数据(搞ldap时就深受其害,没法根治),所以还是FSFS方式更安全一点,我也选择这种方式.   ...

  10. c#dalegate invoke及AsyncCallback使用

    public delegate void AsyncDelegate();        private AsyncDelegate asyncDl; asyncDl = new AsyncDeleg ...