3.Thread中的静态方法

1.currentThread()

public class Thread14 extends Thread{
    static {
        System.out.println("静态块的打印:" + Thread.currentThread().getName());
    }
    public Thread14() {
        System.out.println("构造方法的打印: " + Thread.currentThread().getName());
    }
    public void run() {
        System.out.println("run()方法的打印:" + Thread.currentThread().getName());
    }

    //test
    public static void main(String[] args) {
        Thread14 thread14 = new Thread14();
        thread14.start();
    }

}

运行结果:

静态块的打印: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 }

运行结果:

thread15 ---->begin
Thread.currentThread().getName()----->main
this.getName()----->Thread-0
thread15---->end
run------->begin
Thread.currentThread.getName()---->Thread-0
this.getName()------>Thread-0
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---true
2---false
时间: 2024-11-08 22:29:05

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

Thread中的静态方法

http://www.cnblogs.com/xrq730/p/4851344.html Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用.看一个重要的例子,然后得出结论: public class

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

Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用.看一个重要的例子,然后得出结论: public class MyThread04 extends Thread { static { System.o

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

一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可以知道,Thread类中的静态方法所操作的线程是“正在执行该静态方法的线程”,不一定是其所在位置的线程.为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回

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

Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用.看一个重要的例子,然后得出结论: public class MyThread04 extends Thread { static { System.o

Thread中interrupt()interrupted()和isInterrupted()的区别

在java线程中,线程的状态分为6种.官方文档的解释是:         /**          * Thread state for a thread which has not yet started.          */         NEW,         /**          * Thread state for a runnable thread.  A thread in the runnable          * state is executing in th

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

Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1.this.XXX() 这种调用方式表示的线程是线程实例本身 2.Thread.currentThread.XXX()或Thread.XXX() 上面两种写法是一样的意思.这种调用方式表示的线程是正在执行Thread.currentThread.XXX()所在代码块的线程

Thread中的实例方法

http://www.cnblogs.com/xrq730/p/4851233.html Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1.this.XXX() 这种调用方式表示的线程是线程实例本身 2.Thread.currentThread.XXX()或Thread.XXX() 上面两种写法是一样的意思.这种调用方式表示的线程是正在执行Thr

python中的静态方法和类方法

静态方法独立于类和类的实例,它是定义在类作用域内的方法.可以由类和实例直接调用. 类方法和静态方法都要使用装饰器来定义,定义的基本格式是: @staticmethod def <function name>(): #do something 类方法定义的基本格式是: @ classmethod def <function name>(cls): #do something 类方法与成员方法不同的是,它需要传入参数cls,cls代表类. class Myclass(): x='cla

Java thread中对异常的处理策略

转载:http://shmilyaw-hotmail-com.iteye.com/blog/1881302 前言 想讨论这个话题有一段时间了.记得几年前的时候去面试,有人就问过我一个类似的问题.就是java thread中对于异常的处理情况.由于java thread本身牵涉到并发.锁等相关的问题已经够复杂了.再加上异常处理这些东西,使得它更加特殊. 概括起来,不外乎是三个主要的问题.1. 在java启动的线程里可以抛出异常吗? 2. 在启动的线程里可以捕捉异常吗? 3. 如果可以捕捉异常,对于