java线程常用API总结

Posted 我想月薪过万

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程常用API总结相关的知识,希望对你有一定的参考价值。

一、线程名字的修改

 

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方法

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!");
    

 四、终止线程的睡眠

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;
            
        
    

以上是关于java线程常用API总结的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

Java习惯用法总结

Java进阶之光!2021必看-Java高级面试题总结

python常用代码片段总结

经验总结:Java高级工程师面试题-字节跳动,成功跳槽阿里!

JAVA常用API的总结