getName和setName方法
注意点 setName方法最好放在线程启动之前
最好在线程启动之前修改名字,因为线程启动之后,如果执行过快的话,那么在调用 setName() 之前线程可能就已经结束了
MyThread t1 = new MyThread("haha");
t1.setName("线程1");
t1.start();
System.out.println(t1.getName());
currentThread()方法
哪个线程调用这个代码,就拿到哪个线程。 public static native Thread currentThread();
所以在这个代码例子中,是主线程在调用这个代码,那就可以拿到主线程。这个方法的返回值是线程
{public static void main(String[] args) {//currentThread()方法:哪个线程调用这个代码,就拿到哪个线程Thread m = Thread.currentThread();//public static native Thread currentThread();}
}
sleep睡眠方法
public static void sleep(long millis) {}
作用:让线程睡眠,阻塞。
参数是毫秒,1000好毫秒等于1秒
public static void main(String[] args) throws InterruptedException {//搞清楚Thread类的sleep方法(线程睡眠)for (int i = 1; i <= 10; i++) {System.out.println(i);try {Thread.sleep(1000); //1000毫秒=1秒} catch (Exception e) {e.printStackTrace();}}
}
join方法
就是让方法插队
package com.itheima.demo2threadapi;public class ThreadApiDemo3 {public static void main(String[] args) {//目标 掌握join(插队)方法MyThread2 mt = new MyThread2();mt.start();//主线程在子线程开始之前就已经执行到了i等于3,// 这可能是因为主线程的循环执行得非常快,而子线程的启动需要一定的时间for (int i = 0; i <10; i++) {System.out.println(i);if (i == 3) {try {mt.join();} catch (Exception e) {e.printStackTrace();}}}}
}
class MyThread2 extends Thread{@Overridepublic void run() {//3、在方法中编写线程的任务代码(也就是要干的活)for (int i = 0; i <5; i++) {System.out.println(Thread.currentThread().getName() +"输出:"+i);}}
}
注意点
主线程在子线程开始之前就已经执行到了i等于3,这可能是因为主线程的循环执行得非常快,而子线程的启动需要一定的时间
构造器(可以用来修改线程的名字)
1、public static native Thread currentThread();
MyThread t1 = new MyThread("haha");class MyThread extends Thread{public MyThread(String n) {super(n);//super()是专门用于调用直接父类的构造方法}
2、public Thread(Runnable task, String name) {}
Thread t = new Thread(r, "子线程"); //public Thread(Runnable task, String name) {}