一、线程名字的修改

 

package ThreadDemo;

/**
 * 1、怎么获取当前线程对象?
 * 2、获取线程对象的名字
 *    线程对象.getName();
 * 3、修改线程对象的名字
 *    线程对象.setName("线程名字");
 * 4、当线程没有设置名字的时候,默认的名字有什么规律?
 *    Thread-0
 *    Thread-1
 *    Thread-2
 */

public class ThreadTest05 {
    public static void main(String[] args) {
        // 创建线程对象
        MyThread2 t = new MyThread2();
        // 设置线程的名字
//        t.setName("tttt");
        // 获取线程的名字
        System.out.println(t.getName());
        // 启动线程
        t.start();
    }
}

class MyThread2 extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("分支线程-->" + i);
        }
    }
}
二、获取当前线程对象
package ThreadDemo;

/**
 * 1、怎么获取当前线程对象?
 * 2、获取线程对象的名字
 * 线程对象.getName();
 * 3、修改线程对象的名字
 * 线程对象.setName("线程名字");
 * 4、当线程没有设置名字的时候,默认的名字有什么规律?
 * Thread-0
 * Thread-1
 * Thread-2
 */

public class ThreadTest05 {
    public static void main(String[] args) {

        // currentThread就是当前线程对象
        // 这个代码出现在main方法当中,所以当前线程就是主线程
        Thread currentThread = Thread.currentThread();
        System.out.println(currentThread.getName());

        MyThread2 t = new MyThread2();
        t.setName("t");
        MyThread2 t2 = new MyThread2();
        t2.setName("t2");

        t.start();
        t2.start();

    }
}

class MyThread2 extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            // currentThread就是当前线程对象
            Thread currentThread = Thread.currentThread();
            System.out.println(currentThread.getName());
        }
    }
}
三、线程的sleep方法

java线程常用API总结_开发语言

package ThreadDemo;

public class ThreadTest06 {
    public static void main(String[] args) {
        // 让当前线程进入休眠,睡眠5秒
        // 当前线程是主线程
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 5秒之后执行这里的代码
        System.out.println("hello world!");
    }
}
 四、终止线程的睡眠

java线程常用API总结_ide_02

package ThreadDemo;

/**
 * sleep睡眠太久了,如果希望半道上醒来,该怎么办
 * 注意:这个不是中断线程的执行,是终止线程的睡眠
 */

public class ThreadTest08 {

    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable2());
        t.setName("t");
        t.start();

        //希望5秒之后,t线程醒来
        try {
            Thread.sleep(1000 * 5);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //终断t线程的睡眠(这种中断睡眠的方式依靠了java的异常处理机制)
        t.interrupt();
    }

}

class MyRunnable2 implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "---> begin");
        try {
            //睡眠1年
            Thread.sleep(1000 * 60 * 60 * 24 * 365);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //1年之后才会执行这里
        System.out.println(Thread.currentThread().getName() + "---> end");
    }

}
 五、强行终止线程的执行

不合理的写法

package ThreadDemo;

public class ThreadTest09 {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable3());
        t.setName("t");
        t.start();

        //模拟5秒
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 5秒之后强行终止t线程
        t.stop(); // 已过时(不建议使用。因为这种方式容易丢失数据)
    }
}

class MyRunnable3 implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "--->" + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

合理的写法

package ThreadDemo;

public class ThreadTest09 {
    public static void main(String[] args) {
        MyRunnable3 r = new MyRunnable3();
        Thread t = new Thread(r);
        t.setName("t");
        t.start();

        //模拟5秒
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 5秒之后强行终止t线程
        r.run = false;
    }
}

class MyRunnable3 implements Runnable {

    boolean run = true;

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            if (run) {
                System.out.println(Thread.currentThread().getName() + "--->" + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } else {
                //结束
                return;
            }
        }
    }

}