《Thread和Runnable浅析》中已经说明使用Runnable接口比直接使用Thread要好,因此下面的操作,都是实现Runnable接口。
1、public static Thread currentThread(),返回当前线程;
public void setName(String name),设置线程的名字;
public String getName(),返回线程的名字;
import java.lang.Runnable;
import java.lang.Thread;
class Demo implements Runnable{
public void run(){
for(int i = 0;i<10;i++){
//获取当前线程的名字
System.out.println(Thread.currentThread().getName());
}
}
}
public class ThreadDemo06{
public static void main(String[] args){
Demo demo = new Demo();
Thread thread1 = new Thread(demo);
Thread thread2 = new Thread(demo);
thread2.setName("线程2");
Thread thread3 = new Thread(demo,"线程3");
thread1.start();
thread2.start();
thread3.start();
for(int i = 0;i<10;i++){
//得到的是主线程的名字:main
System.out.println(Thread.currentThread().getName());
}
}
}
从上面我们可以看出,设置线程名的方式有两种:一种是thread2.setName("线程2");一种是Thread thread3 = new Thread(demo,"线程3");
main方法中的for循环,输出的当前的线程名为:main,因为当前线程是主线程。
2、public static void sleep(long millis);静态方法,设置线程休眠的时间,单位是毫秒。
import java.lang.Thread;
import java.lang.Runnable;
public class ThreadDemo07{
public static void main(String[] args){
Demo demo = new Demo();
new Thread(demo).start();
}
}
class Demo implements Runnable{
public void run(){
for(int i = 0;i<10;i++){
if(i==5){
System.out.println("休眠之前时间是:"+System.currentTimeMillis());
try{
//设置线程休眠1s
Thread.sleep(1000);
}catch(InterruptedException e){
}
System.out.println("休眠之后的时间是"+System.currentTimeMillis());
}
}
}
}
3、public final void setPriority(int newPriority),设置线程优先级;
public final int getPriority(),去的线程优先级。
import java.lang.Thread;
import java.lang.Runnable;
public class ThreadDemo08{
public static void main(String[] args){
//改变主线程的优先级
Thread.currentThread().setPriority(6);
for(int i = 0;i<30;i++){
if(i==10){
Demo demo1 = new Demo("低级");
demo1.start();
System.out.println("创建之初的优先级:"+demo1.getPriority());
//设置线程为最低优先级
demo1.setPriority(Thread.MIN_PRIORITY);
}
if(i == 20){
Demo demo2 = new Demo("高级");
demo2.start();
System.out.println("创建之初的优先级:"+demo2.getPriority());
//设置线程为最高优先级
demo2.setPriority(Thread.MAX_PRIORITY);
}
}
}
}
class Demo extends Thread{
private String name;
public Demo(String name){
this.name = name;
}
public void run(){
for(int i = 0;i<10;i++){
System.out.println(this.name+"其优先级是:"+getPriority()+",循环变量的值为:"+i);
}
}
}
Thread类中提供了三个静态变量:(值越大优先级越高)
MAX_PRIORITY:其值是10;
NORM_PRIORITY:其值是5;
MIN_PRIORITY:其值是:1;
4、public final boolean isAlive(),判断线程是否存活;此方法没有固定值,因为线程有可能优先执行,也有可能最后执行。
import java.lang.Runnable;
import java.lang.Thread;
public class ThreadDemo10{
public static void main(String[] args){
Demo demo = new Demo();
Thread t = new Thread(demo);
System.out.println("线程启动前:"+t.isAlive());
t.start();
System.out.println("线程启动后:"+t.isAlive());
}
}
class Demo implements Runnable{
public void run(){
System.out.println("实现了Runnable接口");
}
}
5、public final void join(),强制执行一个线程,只有当线程执行完之后,其他线程才可以继续执行。
import java.lang.Runnable;
import java.lang.Thread;
public class ThreadDemo11{
public static void main(String[] args){
Demo demo = new Demo();
Thread t1 = new Thread(demo,"线程1");
t1.start();
for(int i = 0;i<50;i++){
if(i==10){
try{
t1.join();
}catch(InterruptedException e){
e.getMessage();
}
}
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}
class Demo implements Runnable{
public void run(){
for(int i = 0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}