public static Thread currentThread();
它是一个静态方法,可以通过类名.调用
无需传入任何实参
返回值为Thread对象(线程对象)
通常和线程对象.getName方法配合使用,用来得到当前方法里面运行的是哪个线程
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
int count=0;
while(count<10){
System.out.println("线程名"+Thread.currentThread().getName()+"的小猫咪正在喵喵喵"+(++count));
}
}
}
package Work4;
public class ThreadTest {
public static void main(String[] args) {
//main线程的名字就是main,静态方法也可以通过类名.调用,本质还是类名.静态方法名
System.out.println("main线程的名字为: "+Thread.currentThread().getName());
Thread t=new Thread(new Cat());
System.out.println("使用对象名.静态方法的结果为: "+t.currentThread().getName());
}
}

public final String getName()
被final修饰,意味着该方法不能被重写
无需传入任何实参
返回值为String类型,谁调用,返回谁的名字
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
int count=0;
while(count<10){
System.out.println("线程名"+Thread.currentThread().getName()+"的小猫咪正在喵喵喵"+(++count));
}
}
}
package Work4;
public class ThreadTest {
public static void main(String[] args) {
Thread t=new Thread(new Cat());
//获取自定义的线程的名字,若没有修改,默认是按照Thread-序号的方式进行命名,序号从0开始
System.out.println(t.getName());
}
}

public final void String setName(String name)
被final修饰,意味着该方法不能被重写
需要传入自定义的线程名字
返回值为void,谁调用,就是谁的名字被更改
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
int count=0;
while(count<10){
System.out.println("线程名"+Thread.currentThread().getName()+"的小猫咪正在喵喵喵"+(++count));
}
}
}
package Work4;
public class ThreadTest {
public static void main(String[] args) {
//创建一个线程,这个状态是NEW的状态
Thread t=new Thread(new Cat());
//自定义线程的名字
t.setName("catA线程");
System.out.println(t.getName());
}
}

public Thread.State getState()
无需传入实参
返回值类型为Thread.State
可以用来监视系统的状态
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
int count=0;
while(count<10){
System.out.println("线程名"+Thread.currentThread().getName()+"的小猫咪正在喵喵喵"+(++count));
}
}
}
package Work4;
public class ThreadTest {
public static void main(String[] args) {
Thread t=new Thread(new Cat());
//创建后,线程的状态应该是NEW的状态
System.out.println("创建但未运行时线程的状态为: "+t.getState());
t.start();
//启动start方法后,线程的状态应该是Runnale(可运行)状态
System.out.println("启动start方法后,线程的状态为: "+t.getState());
}
}

public static void sleep(long millis)
被static修饰,因此可以通过类名.sleep的方式调用
返回值类型为void
形参为long类型,实参传入整数类型即可,int类型的字面量也行,因为会发生自动类型转换
形参单位是毫秒,其中1秒=1000毫秒;
谁调用,谁睡眠,睡眠时间由传入的实参时间决定
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
int count=0;
while(count<10){
System.out.println("线程名"+Thread.currentThread().getName()+"的小猫咪正在喵喵喵"+(++count));
}
}
}
package Work4;
public class ThreadTest {
public static void main(String[] args) {
Thread t=new Thread(new Cat());
t.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main线程睡眠5s后再打印这句话!!!!");
}
}

public void interrupt()
返回值类型为void
形参无,因此无需传入实参
谁调用就终止谁的线程
终止正在睡眠的线程(TimedWaiting状态),实际上就是返回线程开启睡眠的所在行,抛出一个异常,然后进入catch里面,catch里面写一些醒来后的逻辑.
某个线程需要运行但是不急着运行,因为cpu的时间片等资源有限,我们就会先让该线程睡眠比较长的时间,然后当cpu不这么忙的时候,我们就把该线程唤醒它,让它去执行它里面对应的逻辑
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
int count=0;
try {
Thread.sleep(1000*60*60*24);
} catch (InterruptedException e) {
System.out.println("唤醒线程: "+Thread.currentThread().getName());
System.out.println("线程名"+Thread.currentThread().getName()+"的小猫咪正在喵喵喵"+(++count));
}
}
}
package Work4;
public class ThreadTest {
public static void main(String[] args) {
Thread t=new Thread(new Cat());
t.start();
for (int i = 0; i <10; i++) {
System.out.println("主线程在运行: "+Thread.currentThread().getName()+(i));
}
t.interrupt();
}
}

阅读以下代码,思考t.sleep(1000)是让哪个线程睡眠5秒
Cat类
package Work4;
public class Cat implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程在运行");
}
}
ThreadTest类
package Work4;
public class ThreadTest {
public static void main(String[] args) {
Thread t=new Thread(new Cat());
t.start();
try {
t.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main线程执行结束");
}
}
对象名.静态方法名本质还是通过类名.静态方法名的方式去进行调用
而Thread.sleep(1000)的作用是让当前线程(在哪个方法里面就是哪个的线程)睡眠
因此t.sleep(1000)让main线程睡眠了1秒
因此会先执行完t对应的线程里面的逻辑,再执行main线程睡眠后面的逻辑
