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 ...
随机推荐
- network重启失败原因
/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE='eth0' eth0后面千万不能加空格之类的
- Linux系统 nfs 共享及 挂载mount 配置
要把 A服务器(192.168.1.1)的 /home 目录挂载到 B服务器(192.168.1.2)的/mnt目录 我们先在 A 服务器上编辑/etc/exports 文件, 添加下面这行代码 /h ...
- 使用mysqldump 对数据库进行备份的乱码问题
最近在做项目的工程中,由于系统中需要提供数据库备份的功能,经过网上一番搜索,觉得采用简单的mysqldump (1)java代码 String backupSQL = "cmd /c mys ...
- 当你在试衣间试衣服,请你务必想起wait()与notify()
在学习多线程的时候,你无法逃避sleep.wait.notify.notifyAll的关键字,我们肯定是对sleep用的最多,即使你写个Demo也要经常用到Thread.sleep(xxx)模拟等待的 ...
- BIOS详解:什么是BIOS ?BIOS的作用?CMOS及其与BIOS的关系?
1.什么是BIOS ? BIOS是英文Basic Input Output System的缩略语,直译过来后中文名称就是基本输入输出系统.它的全称应该是ROM-BIOS,意思是只读存储器基本输入输出系 ...
- js jquery 实现html页面之间参数传递(单一参数、对象参数传递)
最近自己在忙着做毕业设计,后台程序员,前端菜鸡,因为需要,所以实现了html页面之间参数传递.------jstarseven .菜鸡的自我修养. 页面A代码如下: <!DOCTYPE html ...
- 【JS学习笔记】函数传参
比如仅仅改变背景的颜色 函数传参:参数就是占位符. 那么在什么时候用传参呢?函数里定不下来的东西. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- (三)Python在windows上安装
1.安装2.7--进入python官网(网址百度)下载python2.7 和python3.6(很小,2个程序后缀不一样?)2.安装到c:\python----next----advanced不动-- ...
- php学习笔记——基础知识(2)
9.PHP语句 if 语句 - 如果指定条件为真,则执行代码 if...else 语句 - 如果条件为 true,则执行代码:如果条件为 false,则执行另一端代码 if...else if.... ...
- UVa 1395 Slim Span
问题:给出一个n结点的图,求最大边与最小边差值最小的生成树 my code: #include <iostream> #include <cstdio> #include &l ...