API中java.lang.Thread类定义了有关线程的一些方法,具体如下:
构造方法:
public Thread():分配一个新的线程对象。
public Thread(String name):分配一个指定名字的新的线程对象。
public Thread(Runable target):分配一个带有制定目标新的线程对象。
public Thread(Runable target,String name):分配一个带有指定目标新的线程对象并指定名字。
常用方法:
1.public String getName():获取当前线程名称。
// 定义一个Thread子类 public class MyThread2 extends Thread{ // 重写Thread类中的run方法,设置线程任务 @Override public void run() { // super.run(); // 获取线程名称 System.out.println(getName()); } }
/* 线程名称: 主线程:main 新线程:Thread-0,Thread-1,Thread-2 */ public class Demo11ThreadName { public static void main(String[] args) { // 创建一个Thread子类对象 MyThread2 mt = new MyThread2(); // 调用start方法开启新线程,执行run方法 mt.start(); // 匿名类 new MyThread2().start(); } }
运行截图:
2.public static Thread currentThread():返回对当前正在执行的线程对象的引用。
然后可以用线程中的方法getName来获取线程的名称
@Override public void run() { // 返回对当前正在执行的线程对象的引用 // 返回值:线程 Thread td = Thread.currentThread(); System.out.println(td); String name = td.getName(); System.out.println(name); }
public static void main(String[] args) { // 创建一个Thread子类对象 MyThread2 mt = new MyThread2(); // 调用start方法开启新线程,执行run方法 mt.start(); // 匿名类 new MyThread2().start(); }
运行截图:
// 获取主线程的名称 // 只有这一个方法,因为主方法所在的类并没有继承Thread类 // 不能直接调用属于Thread类的getName方法 // 而是调用Thread类的静态方法获取当前线程的以用,然后用线程的getName方法获取名称 Thread.currentThread().getName();
3.public void setName():设置线程名称。
/* 设置线程的名称(两种方式): 1.使用Thread类中的方法setName(名字) 2.创建一个带有参数的构造方式,参数传递线程的名称;调用父类的带参构造方法, 把线程名称传递给父类i,让父类(Thread)给子类起一个名字。 注意区分,被赋值线程对象地址值的变量名(对象名)并不是线程的名称 */ public class MyThread3 extends Thread{ // 重写run方法 @Override public void run() { //super.run(); // 获取当前线程名称 System.out.println(Thread.currentThread().getName()); } public MyThread3() { } public MyThread3(String name) { // 调用父类的带参构造方法, //把线程名称传递给父类 super(name); } }
public static void main(String[] args) { // 开启多线程 MyThread3 mt = new MyThread3(); // 给线程设置名称 mt.setName("线程1"); // 调用start方法开启新线程,执行run方法 mt.start(); // 多线程 MyThread3 mt1 = new MyThread3("线程2"); mt1.start(); }
运行截图:
注意区分:被赋值线程对象的地址值的变量名(对象名)并不是该线程的名称!
4.public void start():导致此线程程开始执行;Java虚拟机调用此线程的run方法。
5.public void run():此线程要执行的任务在此处定义代码。
6.public static void sleep(long millies):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
public static void main(String[] args) { // 模拟秒表 for (int i = 1; i < 60; i++) { System.out.println(i); // 一秒钟打印一次 // 使用Thread类的静态方法sleep(long millies)方法 // 让程序睡眠指定毫秒数*1000 // 有异常,要么throws声明异常,交给JVM,要么try-catch捕捉异常,自行处理 // 此处使用try-catch捕捉 try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } }