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()方法才是应用线程自己调用的。
- public class Thread15 extends Thread{
- public Thread15() {
- System.out.println("thread15 ---->begin");
- System.out.println("Thread.currentThread().getName()----->" + Thread.currentThread().getName());
- System.out.println("this.getName()----->" + this.getName());
- System.out.println("thread15---->end");
- }
- public void 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");
- }
- public static void main(String[] args) {
- Thread15 thread15 = new Thread15();
- thread15.start();
- }
- }
运行结果:
- 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()中的内容,无非这个内容是休眠而已。
- public class Thread16 extends Thread{
- public void run() {
- try{
- System.out.println("run threadName= " + this.getName() + " begin");
- Thread.sleep(20000);
- System.out.println("run threadName= " + this.getName() + " end");
- }catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- Thread16 thread16 = new Thread16();
- System.out.println("begin= " + System.currentTimeMillis());
- thread16.start();
- System.out.println("end= " + System.currentTimeMillis());
- }
- }
执行结果:
- begin= 1447813479735
- end= 1447813479736
- run threadName= Thread-0 begin
- run threadName= Thread-0 end
System.out.print是静态方法,因此输出的内容很快就会完成。启动的线程中有个休眠过程,thread-0 begin 和 thread-0 end 中间就会有等待。
3.yield()
- public class Thread17 extends Thread{
- public void run() {
- long beginTime = System.currentTimeMillis();
- int count = 0;
- for(int i = 0; i < 50000000; i++) {
- Thread.yield();//去掉之后明显整个程序运行时间剪短
- count = count + i + 1;
- }
- long endTime = System.currentTimeMillis();
- System.out.println("用时:" + (endTime - beginTime) + "毫秒" + count);
- }
- public static void main(String[] args) {
- Thread17 thread17 = new Thread17();
- thread17.start();
- // Thread.currentThread().interrupt();
- // System.out.println("1---" + Thread.interrupted());
- // System.out.println("2---" + Thread.interrupted());
- }
- }
yield()就是暂停当前执行的线程,并执行其他线程。这个暂停会是放弃cpu资源的,并且放弃cpu时间不确定,有可能刚放弃就又获得了。因此这里因为yield()方法中间消耗的时间也是不确定的。
4.interrupted()
- public static void main(String[] args) {
- // Thread17 thread17 = new Thread17();
- // thread17.start();
- Thread.currentThread().interrupt();
- System.out.println("1---" + Thread.interrupted());
- System.out.println("2---" + Thread.interrupted());
- }
测试当前线程是否已经中断,执行后就将状态标示改为false。因此,两次调用后返回必然为false
执行结果:
- 1---true
- 2---false
3.Thread中的静态方法的更多相关文章
- Java多线程4:Thread中的静态方法
一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...
- Java多线程3:Thread中的静态方法
Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...
- java 多线程3:Thread类中的静态方法
Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...
- (二)线程Thread中的方法详解
1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...
- 测试Thread中的常用方法
package com.yhqtv.java; /* *测试Thread中的常用方法: * 1.start():启动当前线程:调用当前线程的run() * 2.run():通常需要重写Thread类的 ...
- 线程Thread中的方法详解(二)
1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...
- java多线程2:Thread中的方法
静态方法: Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程". 为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面 ...
- 测试Thread中的常用方法:
测试Thread中的常用方法:start():启动当前线程:调用当前线程的run()run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中currentThread ...
- Java多线程2:Thread中的实例方法
Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...
随机推荐
- WCF 学习笔记之双工实现
WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...
- C#编写Windows 服务
C#编写Windows 服务 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时 ...
- 真的了解js生成随机数吗
由js生成一切随机数的基础都是Math.random()这个方法,这个方法比较特别,生成的随机数落在的区间是[0,1),进行一次操作的话,js只能生成一个类似于[n,m)这样,左闭右开的区间.所以当有 ...
- Java 集合:HashSet 与 ArrayList
Set 集合是无序不可以重复的的.List 集合是有序可以重复的. Java 集合:HashSet 与 hashCode.equals 博客里面已经说到这个问题,但是解释的还是不够清楚. 看一个小例子 ...
- Mybatis学习笔记(四) 之动态SQL语句
动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件 ...
- php集成环境和自己配置的区别,php集成环境、php绿色集成环境、php独立安装版环境这三者的区别
最近有学生问我,直接使用PHP集成环境和我们自己独立安装的php环境有什么不一样吗? 答:PHP集成环境,和自己安装的php环境实际上没啥区别的,只不过大部分的集成环境进行了一些绿化操作,本质上没啥区 ...
- 【C#】Deep copy of objects
If you learned C++ carefully, you must have known something about the copy of object. For example, I ...
- Gpt转mbr
1)Shift + F10 2)diskpart 3)list disk 4)select dist 0 5)clean 6)convert mbr [注]mbr常用于windows操作系统,而gpt ...
- svn服务器搭建-SuSE Linux Enterprise Server 11 SP3
svn存储版本数据也有2种方式: 1.bdb: 2.fsfs. 因为BDB方式在服务器中断时,有可能锁住数据(搞ldap时就深受其害,没法根治),所以还是FSFS方式更安全一点,我也选择这种方式. ...
- c#dalegate invoke及AsyncCallback使用
public delegate void AsyncDelegate(); private AsyncDelegate asyncDl; asyncDl = new AsyncDeleg ...