Thread类的有关方法

package com.atguigu.java;

/**
 *测试Thread中的常用方法:
 * 1.start():启动当前线程;调用当前线程的run()
 * 2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
 * 3.currentThread():静态方法,返回执行当前代码的线程
 * 4.getName():获取当前线程的名字
 * 5.setName():设置当前线程的名字
 */

class HelloThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if (i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

public class ThreadMethodTest {
    public static void main(String[] args){
        HelloThread h1=new HelloThread();
        h1.setName("线程一");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for(int i=0;i<100;i++){
            if(i%2!=0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}
package com.atguigu.java;

/**
 *测试Thread中的常用方法:
 * 1.start():启动当前线程;调用当前线程的run()
 * 2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
 * 3.currentThread():静态方法,返回执行当前代码的线程
 * 4.getName():获取当前线程的名字
 * 5.setName():设置当前线程的名字
 */

class HelloThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if (i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }

    public HelloThread(String name) {
        super(name);
    }
}


public class ThreadMethodTest {
    public static void main(String[] args){
        HelloThread h1=new HelloThread("Thread:1");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for(int i=0;i<100;i++){
            if(i%2!=0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

上面是两种给线程命名的方式。

 

//6.yield():释放当前cpu的执行权

class HelloThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if (i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

            if(i%20==0){
                this.yield();
            }
        }
    }

    public HelloThread(String name) {
        super(name);
    }
}

7.join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态。

public class ThreadMethodTest {
    public static void main(String[] args){
        HelloThread h1=new HelloThread("Thread:1");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for(int i=0;i<100;i++){
            if(i%2!=0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

            if(i==21){
                try {
                    h1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

 

8.stop():已过时。当执行此方法时,强制结束当前线程。

9.sleep(long millitime):让当前线程“睡眠”指定的millitime毫秒。在指定的millitime毫秒时间内,当前线程是阻塞状态。

class HelloThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if (i%2==0){
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

        }
    }

    public HelloThread(String name) {

        super(name);
    }
}

Q:为什么不能用throw抛异常?

public void run() throws Exception{

}

run()方法继承的是Thread类里的,Thread类里面的run是没有抛异常的。重写的一条规则:重写的方法抛的异常不能比父类的更大

 

10.isAlive():判断当前线程是否存活

package com.atguigu.java;

class HelloThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if (i%2==0){
                try {
                    sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

        }
    }

    public HelloThread(String name) {

        super(name);
    }
}


public class ThreadMethodTest {
    public static void main(String[] args){
        HelloThread h1=new HelloThread("Thread:1");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for(int i=0;i<100;i++){
            if(i%2!=0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

            if(i==21){
                try {
                    h1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }

        System.out.println(h1.isAlive());
    }
}

posted @ 2022-04-20 17:44  SherryYuan  阅读(22)  评论(0)    收藏  举报