多线程的常用方法
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{
@Override
public 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) {}